humanish 0.96.0 → 0.97.0

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 (81) hide show
  1. package/README.md +4 -1
  2. package/dist/automatic-analysis-config.d.ts +15 -5
  3. package/dist/automatic-analysis-config.js +25 -4
  4. package/dist/automatic-analysis-config.js.map +1 -1
  5. package/dist/automatic-study-analysis.js +4 -2
  6. package/dist/automatic-study-analysis.js.map +1 -1
  7. package/dist/cua-actor-lab.d.ts +18 -286
  8. package/dist/cua-actor-lab.js +151 -1955
  9. package/dist/cua-actor-lab.js.map +1 -1
  10. package/dist/cua-desktop-lane.d.ts +35 -0
  11. package/dist/cua-desktop-lane.js +13 -0
  12. package/dist/cua-desktop-lane.js.map +1 -0
  13. package/dist/desktop-session.d.ts +41 -0
  14. package/dist/desktop-session.js +44 -0
  15. package/dist/desktop-session.js.map +1 -0
  16. package/dist/doctor-lab.d.ts +6 -1
  17. package/dist/doctor-lab.js +17 -3
  18. package/dist/doctor-lab.js.map +1 -1
  19. package/dist/e2b-cua-desktop.d.ts +3 -0
  20. package/dist/e2b-cua-desktop.js +675 -0
  21. package/dist/e2b-cua-desktop.js.map +1 -0
  22. package/dist/e2b-cua-provisioning.d.ts +311 -0
  23. package/dist/e2b-cua-provisioning.js +1213 -0
  24. package/dist/e2b-cua-provisioning.js.map +1 -0
  25. package/dist/e2b-desktop-session.d.ts +7 -0
  26. package/dist/e2b-desktop-session.js +29 -0
  27. package/dist/e2b-desktop-session.js.map +1 -0
  28. package/dist/index.d.ts +1 -1
  29. package/dist/lab-summary.d.ts +3 -1
  30. package/dist/local-agent-cli.js +1 -1
  31. package/dist/local-agent-cli.js.map +1 -1
  32. package/dist/observer-app.html +2 -2
  33. package/dist/program.js +24 -9
  34. package/dist/program.js.map +1 -1
  35. package/dist/restricted-codex-analysis.d.ts +15 -0
  36. package/dist/restricted-codex-analysis.js +13 -0
  37. package/dist/restricted-codex-analysis.js.map +1 -0
  38. package/dist/restricted-codex-policy.d.ts +56 -0
  39. package/dist/restricted-codex-policy.js +151 -0
  40. package/dist/restricted-codex-policy.js.map +1 -0
  41. package/dist/restricted-codex-session.d.ts +19 -0
  42. package/dist/restricted-codex-session.js +419 -0
  43. package/dist/restricted-codex-session.js.map +1 -0
  44. package/dist/restricted-codex-transport.d.ts +58 -0
  45. package/dist/restricted-codex-transport.js +233 -0
  46. package/dist/restricted-codex-transport.js.map +1 -0
  47. package/dist/run.d.ts +1 -1
  48. package/dist/run.js +1 -1
  49. package/dist/run.js.map +1 -1
  50. package/dist/study-analysis-codex-config.d.ts +11 -0
  51. package/dist/study-analysis-codex-config.js +34 -0
  52. package/dist/study-analysis-codex-config.js.map +1 -0
  53. package/dist/study-analysis-engine.d.ts +6 -3
  54. package/dist/study-analysis-engine.js +19 -10
  55. package/dist/study-analysis-engine.js.map +1 -1
  56. package/dist/study-analysis-job.d.ts +1 -0
  57. package/dist/study-analysis-job.js +1 -1
  58. package/dist/study-analysis-job.js.map +1 -1
  59. package/dist/study-analysis-provider.d.ts +4 -2
  60. package/dist/study-analysis-provider.js +1 -1
  61. package/dist/study-analysis-provider.js.map +1 -1
  62. package/dist/study-analysis-service.d.ts +3 -0
  63. package/dist/study-analysis-service.js +24 -6
  64. package/dist/study-analysis-service.js.map +1 -1
  65. package/dist/study-analysis-validation.d.ts +29 -5
  66. package/dist/study-analysis-validation.js +23 -10
  67. package/dist/study-analysis-validation.js.map +1 -1
  68. package/dist/study-analysis.d.ts +27 -2
  69. package/dist/tui-app.js +102 -102
  70. package/docs/architecture/desktop-sessions.md +80 -0
  71. package/docs/architecture/restricted-codex-analysis.md +89 -0
  72. package/docs/contracts/run-bundle.md +7 -4
  73. package/docs/contracts/schemas.md +1 -1
  74. package/docs/contracts/study-analysis.md +44 -2
  75. package/docs/goals/current.md +4 -4
  76. package/docs/product/automatic-analysis.md +24 -3
  77. package/docs/ramp/README.md +11 -1
  78. package/docs/release/0.96.1-browser-navigation.md +22 -0
  79. package/docs/release/0.97.0-codex-account-analysis.md +45 -0
  80. package/package.json +1 -1
  81. package/skills/humanish/SKILL.md +19 -0
@@ -0,0 +1,80 @@
1
+ # Owned desktop sessions
2
+
3
+ Independent hosted computer-use lanes acquire an owned desktop allocation before
4
+ subject setup, then bind its executor after browser setup. The participant loop
5
+ still consumes `CuaExecutor`; provisioning commands stay in the hosted adapter.
6
+ This internal interface is not a public runtime plugin API.
7
+
8
+ `desktop-session.ts` holds the lifecycle contract. The allocation captures a
9
+ resource ID and a release closure. Its ID is a record of acquisition, not
10
+ authority to reconstruct or reclaim a resource from an arbitrary saved bundle.
11
+
12
+ An allocation binds one participant executor. Closing it immediately rejects new
13
+ observations and actions, forwards no further calls, and shares one release
14
+ attempt across repeated or concurrent callers. Cancellation signals pass through
15
+ unchanged. Closing does not wait for an already-dispatched backend operation;
16
+ that operation may fail as the desktop stops.
17
+
18
+ Cleanup has three outcomes:
19
+
20
+ - `released`: the adapter confirmed termination or that the resource was already
21
+ gone;
22
+ - `retained`: an existing debug-retention policy deliberately kept the desktop;
23
+ - `unconfirmed`: release was unavailable, failed, or returned an invalid result.
24
+
25
+ A closed allocation never implicitly retries cleanup or reopens input. Recovery
26
+ needs its own authorized operation. Runtime exceptions remain untrusted and must
27
+ pass the caller's existing redaction before entering warnings or artifacts.
28
+
29
+ The E2B adapter preserves the existing create options, template overload, startup
30
+ retry guard and kill-on-timeout policy. It captures the acquired ID and kill
31
+ method before provisioning hooks can mutate the SDK object. E2B's boolean kill
32
+ result confirms either termination (`true`) or prior absence (`false`, its 404
33
+ case). Other values do not confirm cleanup. Account-wide enumeration is never
34
+ part of release.
35
+
36
+ Already-absent cleanup carries a warning: the exact termination time is unknown.
37
+ As before, desktop cost is an estimate over the host's acquisition-to-cleanup
38
+ span, not a provider billing measurement.
39
+
40
+ `CuaDesktopLane` separates desktop preparation from the participant runner:
41
+
42
+ 1. `prepare()` acquires and prepares the desktop. Failures still leave cleanup
43
+ authority with the adapter.
44
+ 2. The runner starts its model session and signals the existing hosted pipeline
45
+ gate, preserving the current scheduling order.
46
+ 3. `openSession()` measures initial browser geometry, starts the optional live
47
+ stream, and supplies a `CuaExecutor` plus any participant inbox location.
48
+ 4. The runner executes the participant loop and closes its model session.
49
+ 5. `finalize()` collects final evidence and releases the desktop, including after
50
+ preparation or participant failure. Repeated calls share one finalization.
51
+ 6. `snapshot()` supplies the desktop facts for the existing lane outcome.
52
+
53
+ The E2B implementation lives in `e2b-cua-desktop.ts`; its browser, media and
54
+ subject provisioning primitives live in `e2b-cua-provisioning.ts`. Existing
55
+ helper imports through `cua-actor-lab.ts` remain supported. The adapter never
56
+ imports the lab runner at runtime.
57
+
58
+ The runner owns instructions, model execution, spend guards, screenshots, trace
59
+ persistence and participant outcome interpretation. It does not invoke desktop
60
+ shell commands or manufacture E2B objects for an alternate executor. The internal
61
+ `CuaLaneDeps.createDesktopLane` seam is for construction and contract testing;
62
+ it does not add a user-facing runtime option or bypass CLI admission checks.
63
+
64
+ Final evidence errors cannot skip desktop release. Existing bundle fields and
65
+ desktop lifetime accounting retain their meanings; unconfirmed or retained
66
+ desktops do not become confirmed cleanup. Provider facts remain absent when the
67
+ adapter cannot establish them.
68
+
69
+ This change supplies an internal boundary for future runtime adapters. Managed
70
+ local execution, artifact installation, controller-death leases, capability
71
+ admission and new media support require separate implementations and proofs.
72
+ Independent hosted browser and terminal lanes, plus concurrent shared-world
73
+ seats that use `runCuaLane`, use this boundary. Sequential shared-world lifecycle
74
+ remains separate and uses the same re-exported provisioning helpers.
75
+
76
+ The independent lane's `runSession` testing hook now receives a constructed
77
+ `executor` instead of `desktop`/`executorOptions`. A hook should consume the
78
+ normal `CuaActorSessionOptions` executor or delegate to `runCuaActorSession`.
79
+ Library calls directly using `runCuaActorSession({ desktop, executorOptions })`
80
+ remain supported; the custom in-process `buildExecutor` route is unchanged.
@@ -0,0 +1,89 @@
1
+ # Restricted Codex account analysis
2
+
3
+ The optional account analyst uses a new Codex app-server process after participant
4
+ execution, with a separate conversation, process and tool authority. It can use
5
+ the same host Codex login as a local-agent participant. Existing API analysis
6
+ remains a separate provider.
7
+
8
+ The qualified launcher profile is **Codex CLI 0.154.0, Linux x64, file-backed
9
+ ChatGPT login, `gpt-6-astra`, low reasoning effort**. Other versions/platforms,
10
+ keychain-only logins and API-key Codex logins are refused before a model turn.
11
+ Readiness validates the installation and effective profile without submitting a
12
+ model turn; it does not guarantee current quota or model access.
13
+
14
+ ## Authority and request limits
15
+
16
+ The host creates a private temporary Codex home and links only the existing
17
+ `auth.json`. Humanish never reads or copies its values. The native CLI owns
18
+ authentication and provider network traffic. Its environment excludes provider
19
+ keys, target-app variables, alternate endpoints and operator configuration.
20
+ The selected native binary is launched directly; npm wrappers are resolved to
21
+ their native executable before launch.
22
+
23
+ Before creating a thread, Humanish checks the effective config. Nonempty system
24
+ settings, inherited instructions, MCP, plugins, hooks, alternate stores/endpoints
25
+ and unsupported authority are rejected. The thread is ephemeral, has no runtime
26
+ environments or workspace roots, and uses only the supplied text/images and
27
+ closed output schema. No provider/model fallback is allowed.
28
+
29
+ This profile is **not advertised as tool-free**. The CLI retains code-mode
30
+ descriptions, but the qualified `features.code_mode_host=false` setting rejects
31
+ their actual dispatch. `agents.enabled=false` removes delegation; the older
32
+ feature toggle alone did not. Humanish also refuses raw tool calls, unexpected
33
+ host RPCs and asynchronous question messages before accepting any report. The
34
+ actual notification/denial captures and provenance are in
35
+ [`tests/fixtures/restricted-codex`](https://github.com/danielgwilson/humanish/blob/46330116726f74080fa18947c36da4fb4b333805/tests/fixtures/restricted-codex/README.md).
36
+
37
+ There is one active analyst/readiness session per Humanish process, across all
38
+ provider factories. One fresh thread receives one turn. Evidence is not silently
39
+ downselected: at most 128 images, 20 MiB decoded image data, and 32 MiB serialized
40
+ request data are admitted. Generated report text is limited to 2 MiB. Raw input
41
+ notifications echo image data URLs, so their frame budget is the larger of 2 MiB
42
+ or the admitted serialized packet plus 1 MiB; total stdout is bounded separately
43
+ at the larger of 8 MiB or twice that frame budget plus 4 MiB. Stderr is bounded at
44
+ 2 MiB and is not retained. Notifications are limited to 65,536; aggregate
45
+ generated assistant-text deltas are independently limited to 2 MiB, regardless
46
+ of the input-image wire budget. The request's
47
+ deadline includes startup; individual RPCs also have a 15-second ceiling.
48
+
49
+ Account analysis has unknown dollar cost and no supported generated-token cap.
50
+ Numeric output-token caps are rejected. The integration must likewise reject
51
+ numeric dollar caps for this provider. Known token usage is retained; missing or
52
+ interrupted usage is unknown/partial, not zero. The ordinary analysis validator,
53
+ source-integrity checks and narrative secret scrubber remain responsible for
54
+ accepting and publishing the report.
55
+
56
+ ## Cancellation and auth recovery
57
+
58
+ Cancellation interrupts the turn, then closes the directly owned native child
59
+ and its stdio with bounded termination/kill waits. No stored PID or process group
60
+ is signaled after exit. This proves the direct child's lifecycle, not arbitrary
61
+ descendant-tree reclamation; process-spawning tools are outside this profile.
62
+ If native closure cannot be confirmed, Humanish preserves its private state and
63
+ blocks another session in the same process until that exact child closes.
64
+
65
+ After confirmed closure, normal cleanup removes the owned auth symlink and
66
+ temporary directory. It never deletes or overwrites the operator's original
67
+ login. Unexpected replacement of the symlink is different: it might contain
68
+ rotated auth state. Humanish preserves that private file with mode 0600 inside a
69
+ 0700 task home, removes other scratch/evidence, refuses the report, and returns
70
+ `codex_cleanup_failed`. It does not copy the replacement into the original
71
+ login, which could overwrite a newer concurrent login.
72
+
73
+ Local recovery markers live under
74
+ `$XDG_CACHE_HOME/humanish/codex-analysis-recovery/`, or
75
+ `~/.cache/humanish/codex-analysis-recovery/`. A marker contains only the generated
76
+ task directory name and fixed file names. Find that same directory under the
77
+ system temporary directory (`$TMPDIR` when configured); retained login state is
78
+ inside `home/auth.json`. Do not discard a retained replacement before recovering
79
+ the login. Run `codex login` before retrying if the persistent login is no longer
80
+ usable. Actual private paths and credentials are never included in an analysis
81
+ artifact. An unconfirmed-process marker instead means the private directory is
82
+ retained until the process lifecycle can be inspected safely.
83
+
84
+ Qualification used short, existing-login calls; it did not force token refresh.
85
+ The available Codex file-store source writes through the auth path, but matching
86
+ binary refresh behavior and concurrency with unrelated Codex applications are
87
+ not established by that proof. Recovery deliberately fails closed if storage
88
+ behaves differently. Keychain/other-platform support and whole-process-tree
89
+ leases require their own qualification.
@@ -154,14 +154,17 @@ different facts separate:
154
154
  it did not: a `mobile` (414) and a `small-mobile` (360) seat both render at 500 and are
155
155
  indistinguishable by rendered width;
156
156
  - `browserWindow`: measured browser bounds after the window-fill attempt; physical X client
157
- bounds (`source: xdotool`) take precedence over page-reported outer bounds (`source: cdp`),
158
- which can reflect mobile emulation;
157
+ bounds (`source: xwininfo`) take precedence over page-reported outer bounds (`source: cdp`),
158
+ which can reflect mobile emulation. Historical `source: xdotool` bundles remain readable;
159
+ older xdotool versions can double-count decorations in reported coordinates;
159
160
  - `viewport`: the page's CSS layout viewport and device-pixel ratio measured through CDP on
160
161
  Chromium-family hosted browsers.
161
162
 
162
163
  Before participant actions, hosted computer-use lanes check measured X bounds against every
163
- edge of the captured desktop. If a browser is clipped, one bounded move-and-fit correction
164
- accounts for the window manager's client origin. A window that remains clipped, or whose repair
164
+ edge of the captured desktop. If a browser is clipped, a bounded move-and-fit correction
165
+ remeasures the client origin after each of up to two resize attempts, preserving browser
166
+ controls when they fit. A fullscreen fallback remains for minimum-width windows that cannot
167
+ fit a narrow desktop. A window that remains clipped, or whose repair
165
168
  cannot be verified, ends the lane before participant actions. A fully contained smaller window
166
169
  can run. Missing X measurements are explicitly unverified; an emulated CSS viewport cannot
167
170
  establish physical containment. Final capture observes geometry without resizing the app.
@@ -3,7 +3,7 @@
3
3
  Date: 2026-06-02 (current-state note updated 2026-07-14)
4
4
 
5
5
  Status: reference map for the major contracts shipped through source version
6
- `0.96.0`; it is not an exhaustive inventory of command/result envelopes. Exported types,
6
+ `0.97.0`; it is not an exhaustive inventory of command/result envelopes. Exported types,
7
7
  schema constants, parsers, and validators in `src/` are authoritative. Rows
8
8
  marked "reserved" name layering intent only — no code emits or validates them
9
9
  yet. Do not emit a reserved schema.
@@ -22,10 +22,10 @@ not a participant study. Here, `analyze --dry-run` means checking an existing
22
22
  study's input and admission estimate without credentials, a provider request,
23
23
  or a new analysis artifact.
24
24
 
25
- The default model is `gpt-6-astra`, with high reasoning effort. A request sends selected retained text and
25
+ The default provider is `openai`; its default model is `gpt-6-astra`, with high reasoning effort. A request sends selected retained text and
26
26
  captures to OpenAI, without tools, redirects, provider-side response storage, or
27
27
  automatic retries. `--question` adds a reviewer question; it never changes the
28
- participant assignment. `--max-cost` is required, including for dry-run
28
+ participant assignment. For OpenAI API analysis, `--max-cost` is required, including for dry-run
29
29
  admission. It bounds a conservative estimate, not an exact provider bill.
30
30
  `--timeout-ms` and `--max-output-tokens` bound the request. An exceeded admission
31
31
  estimate retains valid findings and usage but returns a partial result and a
@@ -48,6 +48,48 @@ success. Findings keep reported concerns and observed recovery distinct across
48
48
  participants. Other supported models can be selected explicitly, but evidence
49
49
  reference validation does not certify their interpretation of small visual details.
50
50
 
51
+ ## Explicit Codex account analysis
52
+
53
+ An existing completed recording can use a separate restricted Codex analyst:
54
+
55
+ ```bash
56
+ humanish analyze --run latest --provider codex --dry-run --json
57
+ humanish analyze --run latest --provider codex --json
58
+ ```
59
+
60
+ This branch is qualified on Linux x64 with Codex CLI `0.154.0`, a file-backed
61
+ ChatGPT account login, and `gpt-6-astra` with low reasoning effort. The participant conversation
62
+ is never reused. Selected text and screenshots still go to remote inference;
63
+ this is account authentication, not local inference. No API-key, alternate model
64
+ or configured-provider fallback occurs. Model access and account allowance are
65
+ not established by installation or login alone. Keychain-only login, other
66
+ platforms and CLI versions are refused before a turn; they are not silently
67
+ converted to API authentication.
68
+
69
+ Omit `--max-cost` and `--max-output-tokens` for Codex. Numeric declarations are
70
+ rejected because this transport does not enforce them. `maxCostUsd` and
71
+ `maxOutputTokens` are stored as null. The existing evidence bounds, one analyst
72
+ turn, bounded response bytes and whole-operation timeout still apply. One turn
73
+ is not a claim of one upstream billed request; account limits apply. Reported
74
+ tokens remain inspectable, but dollar estimates, admission dollars and rate dates
75
+ remain null. Interrupted token observations remain explicitly incomplete.
76
+
77
+ The dry-run validates only local evidence and configuration. It does not check
78
+ the CLI, login, model access or quota and does not start a provider request.
79
+ `doctor --lab <lab>` checks the selected analyst setup without a model call.
80
+ Failures leave the recording available; inspect `analyze show` and the attempt's
81
+ accounting before an explicit `analyze --provider codex --rerun`.
82
+
83
+ The persisted identity is the required qualified execution profile: transport,
84
+ authentication and billing class, requested and required resolved model, effort,
85
+ tool-policy revision and CLI version. The launcher must confirm it before the
86
+ turn. A failed pre-dispatch attempt does not prove the CLI or model was observed.
87
+ These fields participate in the configuration digest, preventing reuse across
88
+ providers or changed execution policies. Historical API configurations, hashes
89
+ and corrections are read without inserting new defaults.
90
+
91
+ ## Evidence interpretation
92
+
51
93
  Analysis distinguishes participant actions from harness setup and accounting.
52
94
  Runtime credentials or model usage do not establish that a participant made an
53
95
  external call while performing their task. Observations with an action basis
@@ -1,9 +1,9 @@
1
1
  # Current Goals
2
2
 
3
- Status date: 2026-09-21. Release baseline: `0.96.0`.
3
+ Status date: 2026-09-23. Release baseline: `0.97.0`.
4
4
 
5
5
  This page guides work on current merged source. Published behavior is described
6
- in the [release notes](../release/0.96.0-real-email-receiving.md).
6
+ in the [release notes](../release/0.97.0-codex-account-analysis.md).
7
7
  The [September 9 history](https://github.com/danielgwilson/humanish/blob/main/docs/goals/current-history-2026-09-09.md)
8
8
  preserves the former status log; its queues do not supersede this page.
9
9
 
@@ -88,7 +88,7 @@ requires decision-equivalent retained evidence and a real deletion branch.
88
88
  No first-party deletion branch has met that gate. Public demonstrations do not
89
89
  substitute for it.
90
90
 
91
- ## Current Program Truth (source `0.96.0`)
91
+ ## Current Program Truth (source `0.97.0`)
92
92
 
93
93
  | Surface | Available in merged source | Remaining boundary |
94
94
  | --- | --- | --- |
@@ -99,7 +99,7 @@ substitute for it.
99
99
  | Shared state | Sequential and concurrent single-origin shared-world studies with retained evidence | Multi-origin implementation remains gated; concurrent state change does not establish per-action causation |
100
100
  | Observer | Live/recorded views, shared grid and participant playback, participant assignments, action-specific links, saved moments, zoom, comparison and phone-width review | Sparse captures cannot prove every action's effect; visual comparison alone is not a controlled experiment |
101
101
  | Review and feedback | Verification grades, feedback drafts, portable HTML, redacted bundle derivatives and computer-use completion-source labels | Sharing requires the appropriate grade; participant reports and condition matches still need task adjudication |
102
- | Study findings | Default post-run analysis on supported live routes with a separate disclosed $3 admission estimate limit and opt-out; explicit `analyze`, fairer evidence selection, concern review and versioned findings with exact source links | Model interpretation needs review; bounded selection and source truncation limit coverage; opening Observer never dispatches analysis |
102
+ | Study findings | Default post-run analysis on supported live routes with a separate disclosed $3 admission estimate limit and opt-out; explicit `analyze`, fairer evidence selection, concern review and versioned findings with exact source links; explicit restricted Codex account analysis on the qualified Linux profile | Account dollars/output-token caps are unavailable; Mac/keychain/other CLI profiles are unqualified. Model interpretation needs review; selection limits coverage; opening Observer never dispatches analysis |
103
103
  | TUI and serving | Detached starts, run stopping, reclamation, Observer attachment, loopback serving, run library and AgentMail setup, authentication and lab configuration | Stopping a process does not itself prove sandbox cleanup; TUI views over CLI `stats`/`export` remain follow-ups |
104
104
  | Off-app communication | Recipient-scoped local capture and fresh real AgentMail receiving, supported inline raster images, bounded collection and host-owned recovery | Real mail uses isolated participant surfaces and remains local-only for publication. Hosted mail/model processing, bounded fidelity and interrupted-run recovery are explicit; local-agent, borrowed inboxes and SMS are unsupported |
105
105
  | Mobile and media | Hosted viewport/emulation, desktop geometry checks, bounded dwell and declared camera feed; a synthetic video-only call with separate hosted peers is proven | Audio, TURN, provider-specific rooms, physical-device and touch fidelity remain unproven; unsupported media declarations are rejected |
@@ -22,7 +22,7 @@ review:
22
22
 
23
23
  Omitting `review.analysis` uses these defaults. Set `review.analysis: false` to
24
24
  run participants without the additional analysis request. An explicit analysis
25
- mapping requires `maxCostUsd`. This limits an admission estimate, not the
25
+ mapping using the default OpenAI API provider requires `maxCostUsd`. This limits an admission estimate, not the
26
26
  provider's final bill, and is separate from participant spending limits. Analysis
27
27
  can decline a large study before dispatch when its conservative estimate exceeds
28
28
  that limit. Use `analyze --dry-run --max-cost <usd>` on retained evidence to inspect
@@ -37,6 +37,27 @@ its existing authentication boundary. Review the separate analysis budget before
37
37
  zero-dollar cap does not cap post-run analysis. The bundled first-contact
38
38
  zero-spend product fixture explicitly disables analysis.
39
39
 
40
+ To explicitly use your Codex ChatGPT account for the separate analyst:
41
+
42
+ ```yaml
43
+ review:
44
+ analysis:
45
+ provider: codex
46
+ model: gpt-6-astra
47
+ timeoutMs: 600000
48
+ ```
49
+
50
+ This requires Linux x64, qualified Codex CLI `0.154.0`, and a file-backed ChatGPT account login; the analyst
51
+ uses low reasoning effort and remote inference. Dollar cost and a provider
52
+ enforced output-token ceiling are unknown, so omit `maxCostUsd` and
53
+ `maxOutputTokens`. Numeric values are rejected before participant resources are
54
+ allocated. There is no API fallback. Missing or unsupported account setup leaves
55
+ an explicit failed analysis state and the original recording intact. Use
56
+ `humanish doctor --lab <lab>` for setup checks; account allowance and model access
57
+ remain untested until a request. An omitted provider still means OpenAI, including
58
+ hosted studies whose participant uses a local Codex or Claude login. This setting
59
+ does not enable managed local desktops.
60
+
40
61
  The same configuration works through `humanish run <lab>`, `lab run <lab>`,
41
62
  `watch <lab>`, and TUI live starts. Direct library calls to the five recording
42
63
  producers honor it too. Supported routes are computer-use, scripted-browser,
@@ -53,7 +74,7 @@ Default analysis also skips recordings containing only setup or failure records
53
74
  with no retained participant activity. A desktop startup failure does not start
54
75
  an analysis request. The original failure remains visible.
55
76
 
56
- CLI live starts disclose the separate admission estimate limit before execution.
77
+ CLI live starts disclose the selected analyst and its separate admission estimate limit or unknown account dollars before execution.
57
78
  `humanish lab preflight <lab> --json` and the TUI lab screen also expose the
58
79
  resolved budget without dispatching analysis. Library callers can inspect
59
80
  `resolveAutomaticAnalysis` or `automaticAnalysisBudget` before running.
@@ -64,7 +85,7 @@ existing job and does not start another request. Concurrent or repeated automati
64
85
  invocations cannot silently retry a paid attempt. If a process disappears while
65
86
  an attempt is in flight, its state can be unknown rather than falsely complete.
66
87
  Use manual `humanish analyze --run <exact-run-id> --max-cost 3` for an intentional
67
- follow-up after inspecting the existing attempt and its accounting.
88
+ follow-up after inspecting the existing attempt and its accounting. For the account branch, use `humanish analyze --run <exact-run-id> --provider codex --rerun` without a dollar limit.
68
89
 
69
90
  Stopping participant execution does not start a fresh automatic analysis. A
70
91
  recorded harness cancellation is skipped; ordinary time limits and participant
@@ -2,7 +2,7 @@
2
2
 
3
3
  Status: public-safe contributor and agent ramp.
4
4
 
5
- Package/source version in this tree: `0.96.0` (2026-09-21). The Observer is phone-usable as a stated requirement (observer/AGENTS.md); interactive primitives start from Base UI. The Observer renderer is the observer/ workspace artifact only; the legacy string-concat renderer was deleted at cutover (#426), and rollback is a version pin to 0.42.0. The containment boundary introduced in
5
+ Package/source version in this tree: `0.97.0` (2026-09-23). The Observer is phone-usable as a stated requirement (observer/AGENTS.md); interactive primitives start from Base UI. The Observer renderer is the observer/ workspace artifact only; the legacy string-concat renderer was deleted at cutover (#426), and rollback is a version pin to 0.42.0. The containment boundary introduced in
6
6
  `0.15.1` remains in force: managed run and output paths bind to validated
7
7
  physical filesystem identities, and stored provider IDs are evidence, not
8
8
  cleanup authority. The bundled OSS meta-lab is dry-run only until
@@ -47,6 +47,16 @@ If a change does not improve one of those loops, it probably belongs elsewhere.
47
47
 
48
48
  ## Current State
49
49
 
50
+ The [0.97.0 release note](../release/0.97.0-codex-account-analysis.md) describes
51
+ explicit Codex account analysis on a qualified Linux CLI/login profile, with
52
+ separate analyst authority, evidence-linked reports and unknown-dollar accounting.
53
+ Existing API defaults remain unchanged; managed local desktops and Mac account
54
+ analysis are not qualified by this release.
55
+
56
+ The [0.96.1 release note](../release/0.96.1-browser-navigation.md) describes
57
+ accurate physical browser measurements and bounded fitting that preserves normal
58
+ browser controls when they fit. Narrow screens retain the fullscreen fallback.
59
+
50
60
  The [0.96.0 release note](../release/0.96.0-real-email-receiving.md) describes
51
61
  fresh per-participant AgentMail inboxes, isolated desktop mail views, host-owned
52
62
  cleanup/recovery, local-only evidence publication, and authentication/configuration
@@ -0,0 +1,22 @@
1
+ # 0.96.1 — Preserve browser navigation
2
+
3
+ Hosted browser studies now measure physical client bounds with `xwininfo`.
4
+ The older `xdotool` build on hosted desktops can count window decorations twice,
5
+ incorrectly reporting that a visible browser extends beyond the captured screen.
6
+ That false reading could trigger fullscreen, hiding the tabs and address bar
7
+ participants use to move between an application and their study inbox.
8
+
9
+ The fitting step now remeasures the actual client origin after resizing and
10
+ allows a second bounded adjustment when the window manager restores decorations.
11
+ Normal browser controls remain visible when they fit. Narrow desktops retain
12
+ the fullscreen fallback when a minimum-width browser cannot otherwise fit.
13
+
14
+ New recordings identify the physical measurement as `source: xwininfo`.
15
+ Historical `xdotool` and `cdp` geometry remains readable. Missing physical reads
16
+ remain unverified; an emulated CSS viewport cannot establish screen containment.
17
+ Final geometry capture still observes without moving or resizing the browser.
18
+
19
+ Regression coverage includes a sanitized hosted-desktop measurement, ambiguous
20
+ or missing geometry, decoration changes during resizing, narrow-screen fallback,
21
+ and saved-run compatibility. This does not change inbox delivery or participant
22
+ instructions.
@@ -0,0 +1,45 @@
1
+ # 0.97.0 — Codex account reports on Linux
2
+
3
+ Saved studies can use an existing Codex ChatGPT login for their separate
4
+ findings report. Select it explicitly:
5
+
6
+ ```bash
7
+ humanish analyze --run latest --provider codex --dry-run
8
+ humanish analyze --run latest --provider codex
9
+ ```
10
+
11
+ For an automatic report after a live study, set:
12
+
13
+ ```yaml
14
+ review:
15
+ analysis:
16
+ provider: codex
17
+ ```
18
+
19
+ The initial qualification is Linux x64, Codex CLI 0.154.0, a file-backed
20
+ ChatGPT login, and `gpt-6-astra` with low reasoning effort. Other platforms,
21
+ CLI versions and keychain-only logins are refused. Selected evidence still goes
22
+ to remote inference. Model access and account allowance depend on the account.
23
+
24
+ Account dollars and the generated-token ceiling are unknown; numeric dollar or
25
+ output-token caps are rejected. Time and byte limits still apply. Token counts
26
+ are retained when available, and interrupted usage remains incomplete. Existing
27
+ OpenAI API analysis defaults and participant setup requirements are unchanged.
28
+
29
+ The analyst has its own conversation and restricted tool configuration.
30
+ Evidence admission, exact source references, secret scrubbing, immutable attempt
31
+ accounting and source-change checks apply to both providers. Cancellation
32
+ preserves recordings and earlier valid findings. Unconfirmed process cleanup or
33
+ unexpected replacement credentials produce a failed attempt and private recovery
34
+ guidance. Historical reports remain readable as execution profiles evolve.
35
+
36
+ Doctor checks the selected analyst's setup without a model turn. Dry-run checks
37
+ local evidence and configuration only; it does not test CLI/login/model access.
38
+ The CLI, TUI and Observer disclose account limits consistently. This release
39
+ does not introduce managed local desktops or qualify Mac account analysis.
40
+
41
+ The [qualification receipt](https://github.com/danielgwilson/humanish/blob/46330116726f74080fa18947c36da4fb4b333805/docs/goals/computer-use-actor/receipts/codex-account-analysis-2026-09-23.md)
42
+ records real screenshot analysis, cache reuse, cancellation, automatic reports
43
+ after desktop cleanup, desktop/phone evidence review, failures and proof limits.
44
+ See [configuration](../product/automatic-analysis.md) and the
45
+ [restricted launcher contract](../architecture/restricted-codex-analysis.md).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "humanish",
3
- "version": "0.96.0",
3
+ "version": "0.97.0",
4
4
  "description": "Open-source-safe CLI for persona simulation, observer review, and public-safe feedback drafts.",
5
5
  "author": "Daniel G Wilson <daniel@danielgwilson.com>",
6
6
  "keywords": [
@@ -93,6 +93,25 @@ exact returned path, not a basename that could resolve to another manifest.
93
93
  - keep `.env.example` commit-safe and value-free;
94
94
  - never commit generated run bundles.
95
95
 
96
+ ## Choosing a findings analyst
97
+
98
+ Analysis is separate from the participant. Existing manual and automatic defaults
99
+ use the OpenAI API with its own admission budget; a local-agent participant does
100
+ not change that default. To use the restricted Codex ChatGPT account analyst,
101
+ set `review.analysis.provider: codex` or pass `analyze --provider codex` on a
102
+ completed recording. This uses remote inference and the qualified CLI/login,
103
+ not local inference or the participant's existing conversation. See
104
+ [the analysis contract](../../docs/contracts/study-analysis.md) for the current
105
+ CLI/model qualification and setup limits.
106
+
107
+ Do not pass numeric `maxCostUsd`/`maxOutputTokens` or their CLI flags to the
108
+ account branch. It cannot enforce those ceilings and rejects them. Account dollar
109
+ cost remains unknown even when token usage is reported. There is no fallback to
110
+ an API key or another provider. `analyze --dry-run --provider codex` validates
111
+ local evidence/configuration only; `doctor --lab` checks setup without a model
112
+ request. Inspect a failed attempt before explicitly retrying `--provider codex
113
+ --rerun`. Opening Observer never starts analysis.
114
+
96
115
  ## Format Stack
97
116
 
98
117
  When creating or editing Humanish files: