humanish 0.97.0 → 0.99.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.
- package/AGENTS.md +86 -79
- package/CONTRIBUTING.md +7 -2
- package/README.md +8 -1
- package/dist/actor-contract.d.ts +35 -1
- package/dist/actor-contract.js +38 -0
- package/dist/actor-contract.js.map +1 -1
- package/dist/adapter-extension.js +1 -0
- package/dist/adapter-extension.js.map +1 -1
- package/dist/browser-control-client.d.ts +14 -0
- package/dist/browser-control-client.js +134 -0
- package/dist/browser-control-client.js.map +1 -0
- package/dist/browser-control-dispatcher.d.ts +14 -0
- package/dist/browser-control-dispatcher.js +109 -0
- package/dist/browser-control-dispatcher.js.map +1 -0
- package/dist/browser-control-protocol.d.ts +371 -0
- package/dist/browser-control-protocol.js +155 -0
- package/dist/browser-control-protocol.js.map +1 -0
- package/dist/browser-control-transport.d.ts +24 -0
- package/dist/browser-control-transport.js +156 -0
- package/dist/browser-control-transport.js.map +1 -0
- package/dist/comms-lease-store.d.ts +1 -0
- package/dist/comms-lease-store.js +9 -3
- package/dist/comms-lease-store.js.map +1 -1
- package/dist/computer-use-actor.d.ts +2 -2
- package/dist/computer-use-actor.js +6 -1
- package/dist/computer-use-actor.js.map +1 -1
- package/dist/computer-use.d.ts +23 -1
- package/dist/computer-use.js +253 -70
- package/dist/computer-use.js.map +1 -1
- package/dist/cua-actor-lab.d.ts +6 -1
- package/dist/cua-actor-lab.js +55 -15
- package/dist/cua-actor-lab.js.map +1 -1
- package/dist/cua-executor-error.d.ts +31 -0
- package/dist/cua-executor-error.js +48 -0
- package/dist/cua-executor-error.js.map +1 -0
- package/dist/cua-provider-error.d.ts +12 -0
- package/dist/cua-provider-error.js +28 -0
- package/dist/cua-provider-error.js.map +1 -0
- package/dist/desktop-session.js +3 -1
- package/dist/desktop-session.js.map +1 -1
- package/dist/doctor-lab.d.ts +2 -0
- package/dist/doctor-lab.js +26 -8
- package/dist/doctor-lab.js.map +1 -1
- package/dist/e2b-desktop-executor.d.ts +1 -24
- package/dist/e2b-desktop-executor.js +2 -127
- package/dist/e2b-desktop-executor.js.map +1 -1
- package/dist/e2b-terminal-lab.js +1 -0
- package/dist/e2b-terminal-lab.js.map +1 -1
- package/dist/frame-signature.d.ts +24 -0
- package/dist/frame-signature.js +128 -0
- package/dist/frame-signature.js.map +1 -0
- package/dist/guest-bootstrap.d.ts +43 -0
- package/dist/guest-bootstrap.js +240 -0
- package/dist/guest-bootstrap.js.map +1 -0
- package/dist/guest-browser-tools.d.ts +8 -0
- package/dist/guest-browser-tools.js +66 -0
- package/dist/guest-browser-tools.js.map +1 -0
- package/dist/guest-chromium-text.d.ts +27 -0
- package/dist/guest-chromium-text.js +281 -0
- package/dist/guest-chromium-text.js.map +1 -0
- package/dist/guest-desktop-executor.d.ts +22 -0
- package/dist/guest-desktop-executor.js +177 -0
- package/dist/guest-desktop-executor.js.map +1 -0
- package/dist/guest-desktop-native.d.ts +14 -0
- package/dist/guest-desktop-native.js +131 -0
- package/dist/guest-desktop-native.js.map +1 -0
- package/dist/guest-runtime-desktop.d.ts +35 -0
- package/dist/guest-runtime-desktop.js +231 -0
- package/dist/guest-runtime-desktop.js.map +1 -0
- package/dist/guest-runtime-main.d.ts +1 -0
- package/dist/guest-runtime-main.js +31 -0
- package/dist/guest-runtime-main.js.map +1 -0
- package/dist/guest-runtime-revision.d.ts +1 -0
- package/dist/guest-runtime-revision.js +3 -0
- package/dist/guest-runtime-revision.js.map +1 -0
- package/dist/guest-runtime.d.ts +25 -0
- package/dist/guest-runtime.js +96 -0
- package/dist/guest-runtime.js.map +1 -0
- package/dist/lab-config.js +10 -3
- package/dist/lab-config.js.map +1 -1
- package/dist/lab-engine.js +6 -0
- package/dist/lab-engine.js.map +1 -1
- package/dist/lab-summary.d.ts +2 -0
- package/dist/lab-summary.js +5 -0
- package/dist/lab-summary.js.map +1 -1
- package/dist/local-agent-cli.js +1 -1
- package/dist/local-agent-cli.js.map +1 -1
- package/dist/local-firecracker-desktop.d.ts +13 -0
- package/dist/local-firecracker-desktop.js +166 -0
- package/dist/local-firecracker-desktop.js.map +1 -0
- package/dist/local-firecracker-study.d.ts +9 -0
- package/dist/local-firecracker-study.js +93 -0
- package/dist/local-firecracker-study.js.map +1 -0
- package/dist/local-runtime-config.d.ts +6 -0
- package/dist/local-runtime-config.js +56 -0
- package/dist/local-runtime-config.js.map +1 -0
- package/dist/local-runtime-host.d.ts +31 -0
- package/dist/local-runtime-host.js +128 -0
- package/dist/local-runtime-host.js.map +1 -0
- package/dist/local-runtime-release.d.ts +5 -0
- package/dist/local-runtime-release.js +18 -0
- package/dist/local-runtime-release.js.map +1 -0
- package/dist/local-runtime-ssh.d.ts +21 -0
- package/dist/local-runtime-ssh.js +89 -0
- package/dist/local-runtime-ssh.js.map +1 -0
- package/dist/local-runtime.d.ts +24 -0
- package/dist/local-runtime.js +131 -0
- package/dist/local-runtime.js.map +1 -0
- package/dist/observer-app.html +4 -4
- package/dist/pricing.d.ts +22 -1
- package/dist/pricing.js +22 -0
- package/dist/pricing.js.map +1 -1
- package/dist/program.js +26 -0
- package/dist/program.js.map +1 -1
- package/dist/restricted-codex-participant-policy.d.ts +39 -0
- package/dist/restricted-codex-participant-policy.js +69 -0
- package/dist/restricted-codex-participant-policy.js.map +1 -0
- package/dist/restricted-codex-participant-run.d.ts +20 -0
- package/dist/restricted-codex-participant-run.js +78 -0
- package/dist/restricted-codex-participant-run.js.map +1 -0
- package/dist/restricted-codex-participant.d.ts +14 -0
- package/dist/restricted-codex-participant.js +178 -0
- package/dist/restricted-codex-participant.js.map +1 -0
- package/dist/restricted-codex-session.d.ts +2 -2
- package/dist/restricted-codex-session.js +34 -26
- package/dist/restricted-codex-session.js.map +1 -1
- package/dist/run-detail.js +4 -2
- package/dist/run-detail.js.map +1 -1
- package/dist/run.d.ts +12 -5
- package/dist/run.js +17 -1
- package/dist/run.js.map +1 -1
- package/dist/shared-world-lab.js +2 -2
- package/dist/shared-world-lab.js.map +1 -1
- package/dist/study-analysis-job.d.ts +2 -2
- package/dist/study-analysis-validation.d.ts +14 -14
- package/dist/study-costs.js +6 -0
- package/dist/study-costs.js.map +1 -1
- package/dist/tui-app.js +37 -37
- package/docs/architecture/browser-control.md +117 -0
- package/docs/architecture/guest-desktop.md +87 -0
- package/docs/architecture/local-browser-runtime.md +147 -0
- package/docs/architecture/restricted-codex-analysis.md +8 -4
- package/docs/architecture/runtime-broker-core.md +30 -0
- package/docs/contracts/schemas.md +1 -1
- package/docs/goals/current.md +26 -9
- package/docs/product/open-source-install-experience.md +7 -0
- package/docs/ramp/README.md +28 -13
- package/docs/release/0.98.0-local-browser-studies.md +31 -0
- package/docs/release/0.99.0-local-browser-mac.md +34 -0
- package/package.json +4 -2
- package/skills/humanish/SKILL.md +23 -3
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Internal browser control
|
|
2
|
+
|
|
3
|
+
The browser-control client implements the existing `CuaExecutor` over an
|
|
4
|
+
already-owned Node `Duplex`. The matching dispatcher invokes an owner-supplied
|
|
5
|
+
executor. This is a preparatory internal boundary, not a managed-local runtime,
|
|
6
|
+
CLI mode, browser launcher, VM isolation claim, or installer.
|
|
7
|
+
|
|
8
|
+
## Ownership and admission
|
|
9
|
+
|
|
10
|
+
`createBrowserControlClient({ transport, identity, requestTimeoutMs? })` returns
|
|
11
|
+
`{ executor, ready(), close() }`. `ready()` performs a lazy handshake; the first
|
|
12
|
+
observation/action also performs it when needed. The owner closes the client
|
|
13
|
+
when its session ends. The client never discovers endpoints, opens sockets,
|
|
14
|
+
spawns processes, reconnects, retries, or replays a mutation.
|
|
15
|
+
|
|
16
|
+
`attachBrowserControlDispatcher({ transport, identity, executor, isAuthorized,
|
|
17
|
+
authoritySignal })` returns `{ close() }`. The authority signal is required.
|
|
18
|
+
The owner establishes the channel and authority independently; the identity's
|
|
19
|
+
`generation`, `challenge`, and `runtimeRevision` only check consistency.
|
|
20
|
+
Each is a bounded ASCII token. A matching string does not prove a lease or
|
|
21
|
+
authenticate executable bytes.
|
|
22
|
+
|
|
23
|
+
The dispatcher checks current authorization immediately before invoking browser
|
|
24
|
+
I/O. It passes a signal combining owner revocation, channel loss, and its request
|
|
25
|
+
deadline to `execute`. The physical driver must check that signal immediately
|
|
26
|
+
before **each actual input**, including after asynchronous preparation. Closing
|
|
27
|
+
the channel cannot roll back already-dispatched input or prove the browser has
|
|
28
|
+
stopped. The physical owner remains responsible for resource cleanup and the
|
|
29
|
+
independent watchdog. Observation has no cancellation parameter in the existing
|
|
30
|
+
executor interface; late observations are discarded after closure.
|
|
31
|
+
|
|
32
|
+
One operation may be pending, including handshake and observation. Concurrent
|
|
33
|
+
calls are rejected rather than queued. The client marks its executor with
|
|
34
|
+
`stallRecovery: 'fail_closed'`, so an earlier computer-use loop deadline cannot
|
|
35
|
+
trigger the legacy observation retry or idle-action skip behavior.
|
|
36
|
+
|
|
37
|
+
## Wire contract
|
|
38
|
+
|
|
39
|
+
Each frame is a four-byte unsigned big-endian length followed by strict UTF-8
|
|
40
|
+
JSON. The parser allocates its bounded payload only after validating the length;
|
|
41
|
+
it handles fragmented and coalesced input without repeatedly concatenating it.
|
|
42
|
+
A partially received frame has a nonrenewing 35-second assembly deadline.
|
|
43
|
+
|
|
44
|
+
Version 1 has only `HELLO`, `OBSERVE`, and `EXECUTE`. Both directions carry the
|
|
45
|
+
version, operation, identity, strictly increasing sequence and `request-N`
|
|
46
|
+
correlation ID. Execute additionally carries the distinct `action-N` ID.
|
|
47
|
+
Unknown fields, methods, versions, stale identity, duplicates, missing or wrong
|
|
48
|
+
correlation, malformed UTF-8/JSON and oversized frames close admission. There is
|
|
49
|
+
no generic CDP, command, file, navigation-management, or runtime-management method.
|
|
50
|
+
Initial target navigation remains an adapter-owned operation.
|
|
51
|
+
|
|
52
|
+
Replies acknowledge completion or contain a finite `CuaExecutorError` code and
|
|
53
|
+
`not_dispatched` / `outcome_uncertain` disposition. They never include raw
|
|
54
|
+
exception prose, typed text, page URLs, or browser errors in their error fields.
|
|
55
|
+
A generic driver exception after invocation is uncertain; only a genuine typed
|
|
56
|
+
driver declaration can attest that input was never dispatched.
|
|
57
|
+
|
|
58
|
+
The client resolves execute only after a matching completion acknowledgement and
|
|
59
|
+
its write callback. Cancellation, deadline, explicit close, or channel loss after
|
|
60
|
+
a possible write is uncertain and terminal. A later acknowledgement cannot reopen
|
|
61
|
+
that channel. Pre-aborted signals and locally rejected input cause no write.
|
|
62
|
+
Cancellation during the preliminary handshake remains a pre-dispatch action
|
|
63
|
+
failure. No exactly-once or rollback guarantee is implied by sequence IDs.
|
|
64
|
+
|
|
65
|
+
## Finite bounds
|
|
66
|
+
|
|
67
|
+
| Input | Version 1 bound |
|
|
68
|
+
| --- | --- |
|
|
69
|
+
| Framed JSON | 12 MiB |
|
|
70
|
+
| PNG bytes | 8 MiB |
|
|
71
|
+
| Image dimensions | 4096 per side, at most 16,000,000 pixels |
|
|
72
|
+
| Typed text and each observed string | 64 KiB UTF-8 |
|
|
73
|
+
| Key chord | 16 keys, 64 characters per key |
|
|
74
|
+
| Drag | 1–1024 points |
|
|
75
|
+
| Coordinates, deltas, scroll position | Finite, within ±1,000,000; fractions preserved |
|
|
76
|
+
| Wait | 0–30 seconds, fractions preserved |
|
|
77
|
+
| Client request | 35 seconds by default; caller may choose 1–60 seconds |
|
|
78
|
+
| Dispatcher request | 35 seconds including acknowledgement write |
|
|
79
|
+
|
|
80
|
+
Observation requires a PNG and state signature. It may include bounded URL,
|
|
81
|
+
title, text, and fractional scroll position; those remain runtime-only under the
|
|
82
|
+
existing loop contract. Arbitrary `appState` is refused because v1 has no closed
|
|
83
|
+
schema for it. The protocol does not truncate strings, round coordinates, or
|
|
84
|
+
silently drop unsupported state.
|
|
85
|
+
|
|
86
|
+
PNG admission checks signature, IHDR before decoder allocation, chunk framing,
|
|
87
|
+
IDAT/IEND presence, no trailing bytes, CRCs and full decode. Version 1 admits
|
|
88
|
+
8-bit, noninterlaced browser PNGs. Interlaced and 16-bit images are rejected:
|
|
89
|
+
the current decoder has an unbounded interlaced inflation branch, so admitting
|
|
90
|
+
those would require a separately bounded decoder. Image dimensions and the
|
|
91
|
+
pixel product are checked before decoding, independently of compressed size.
|
|
92
|
+
|
|
93
|
+
## Verification boundary
|
|
94
|
+
|
|
95
|
+
`tests/browser-control-protocol.test.ts`, `browser-control-transport.test.ts`
|
|
96
|
+
and `browser-control-client.test.ts` exercise production schemas and framing,
|
|
97
|
+
all action kinds, image limits, correlation, malformed input, revocation,
|
|
98
|
+
concurrency, lost acknowledgements, backpressure and cancellation. These use
|
|
99
|
+
synthetic PNGs and inert paired byte streams, with no network, model or VM calls.
|
|
100
|
+
They establish the protocol contract, not a real-browser or managed-runtime
|
|
101
|
+
claim. The separate owned-child/browser conformance proof must retain real
|
|
102
|
+
pixels and independently observed fixture mutations through the same modules.
|
|
103
|
+
|
|
104
|
+
From a source checkout, run `pnpm build && pnpm browser-control:proof` with a
|
|
105
|
+
Chromium installation that supports its sandbox. The proof uses a fresh profile,
|
|
106
|
+
a private local socket, a separate controller process and a synthetic loopback
|
|
107
|
+
page. It checks a normal save, a lost acknowledgement after one save, and owner
|
|
108
|
+
revocation/cancellation during input preparation. Screenshots, loop traces,
|
|
109
|
+
independent save counts and exact child/profile cleanup results are retained in
|
|
110
|
+
`.humanish/browser-control-proof/`. Failed cleanup remains unconfirmed and keeps
|
|
111
|
+
the private recovery directory; killing a controller alone does not prove its
|
|
112
|
+
browser stopped.
|
|
113
|
+
|
|
114
|
+
This is deterministic `runComputerUseLoop` conformance, not model perception,
|
|
115
|
+
the study producer, a ready-desktop adapter, a durable local-study bundle or
|
|
116
|
+
Observer qualification. Page request interception does not establish process-wide
|
|
117
|
+
egress isolation. Those integration and runtime boundaries remain separate gates.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Headed browser guest components
|
|
2
|
+
|
|
3
|
+
These internal components implement native input and full-desktop captures for a
|
|
4
|
+
maintained browser-only guest. They do not enable a public local-runtime mode.
|
|
5
|
+
The VM owner, control transport, app network policy, installed setup and complete
|
|
6
|
+
study journey require separate qualification.
|
|
7
|
+
|
|
8
|
+
The driver uses the existing `CuaExecutor` contract behind
|
|
9
|
+
[browser control](browser-control.md). Coordinates refer to the complete Xvfb
|
|
10
|
+
frame, including the browser's address bar. Invalid points are refused instead
|
|
11
|
+
of moved to a different target. Captures must match the admitted geometry and
|
|
12
|
+
pass the bounded PNG validator. Browser URL/title/DOM metadata is absent in this
|
|
13
|
+
component; callers must not invent it from the screenshot or infer task matches.
|
|
14
|
+
Progress detection uses the same coarse frame signature as the hosted desktop.
|
|
15
|
+
|
|
16
|
+
## Input boundary
|
|
17
|
+
|
|
18
|
+
The actor receives the existing finite action union. Native tool paths, display,
|
|
19
|
+
Xauthority and guest temporary directory come from the owner. Key names map to a
|
|
20
|
+
closed list before reaching xdotool, whose own command syntax must never receive
|
|
21
|
+
arbitrary participant strings. A native wheel step is not an exact pixel-scroll
|
|
22
|
+
promise; one action permits at most 100 wheel steps. The entire drag is checked
|
|
23
|
+
before its first input.
|
|
24
|
+
|
|
25
|
+
Each input checks the current authority after asynchronous preparation. A
|
|
26
|
+
partial or unacknowledged input closes the executor; it is never automatically
|
|
27
|
+
replayed. Releasing a held button can itself click or drop, so revocation does
|
|
28
|
+
not inject a cleanup mouseup into the app. The owner must stop the private
|
|
29
|
+
browser/display. A stopped helper alone does not establish desktop or VM absence.
|
|
30
|
+
|
|
31
|
+
Text in a focused, editable top-level document uses Chromium's fixed
|
|
32
|
+
`Input.insertText` command over the owner's private Playwright pipe. The actor
|
|
33
|
+
receives no CDP, JavaScript, selector, or debugging endpoint. A separate isolated
|
|
34
|
+
world checks actual document focus and binds preparation to the editable element;
|
|
35
|
+
page changes, additional tabs, dialogs, iframe focus and ambiguous focus are
|
|
36
|
+
refused. The owner acquires the one page and native window before untrusted
|
|
37
|
+
navigation. The driver never chooses another tab or brings one to the front.
|
|
38
|
+
Focus can change between protocol messages; this is not atomic element-targeted
|
|
39
|
+
input or a general multi-window driver.
|
|
40
|
+
|
|
41
|
+
Address-bar text is admitted only after an explicit Ctrl+L action, uses printable
|
|
42
|
+
ASCII, and repeats that chord after checking the owned active window. Unicode
|
|
43
|
+
or control characters in browser chrome are refused. Clicking an arbitrary
|
|
44
|
+
chrome field does not authorize text entry there. Content insertion is browser
|
|
45
|
+
text/IME insertion, not a stream of physical key presses; keyboard shortcuts
|
|
46
|
+
remain native. There is no alternate-route fallback after a failed insertion.
|
|
47
|
+
|
|
48
|
+
Direct native Unicode typing and a one-transfer clipboard helper were rejected
|
|
49
|
+
by exact Chromium field readback. Successful process or clipboard transfer
|
|
50
|
+
acknowledgements did not establish successful application input. The supported
|
|
51
|
+
text paths likewise need application readback to establish task outcomes.
|
|
52
|
+
|
|
53
|
+
Native children use fixed paths and a minimal explicit environment. Operator
|
|
54
|
+
credentials and inherited Xauthority are not forwarded. Native address-bar text travels over the
|
|
55
|
+
helper's stdin; web text travels over the private browser pipe, never a shell. Helpers have bounded deadlines and output;
|
|
56
|
+
raw diagnostic text is never returned as an executor error. Only an acquired,
|
|
57
|
+
still-live child handle authorizes termination. If capture-helper exit cannot
|
|
58
|
+
be confirmed, its private files stay for runtime-owner reclamation.
|
|
59
|
+
|
|
60
|
+
## Build and proof
|
|
61
|
+
|
|
62
|
+
The source-only [guest recipe](https://github.com/danielgwilson/humanish/blob/main/runtime/browser-guest/README.md) builds a
|
|
63
|
+
pinned Debian/Chromium/Xvfb development base with package/source references and
|
|
64
|
+
notices. It is not a redistributed release image or a VM qualification receipt.
|
|
65
|
+
A native ARM64 build and its exact browser behavior are separate from amd64.
|
|
66
|
+
|
|
67
|
+
After building the development image and JavaScript, run the scoped native proof
|
|
68
|
+
with its exact local image ID:
|
|
69
|
+
|
|
70
|
+
```sh
|
|
71
|
+
HUMANISH_GUEST_IMAGE=sha256:<image-id> pnpm guest-desktop:proof
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
This launches an ordinary disposable container with no network, host mounts or
|
|
75
|
+
host devices. Chromium retains its sandbox. The harness downloads and verifies
|
|
76
|
+
the hash-pinned upstream Playwright Docker seccomp profile, which permits the
|
|
77
|
+
user namespaces needed by that sandbox. This container configuration is a test
|
|
78
|
+
environment, not the proposed Firecracker boundary. The harness retains failed
|
|
79
|
+
attempts, full-frame captures, synthetic app readback and exact-container cleanup
|
|
80
|
+
under ignored `.humanish/guest-desktop-proof/`.
|
|
81
|
+
|
|
82
|
+
The proof covers visible browser chrome, address-bar navigation, Unicode and
|
|
83
|
+
rapid/large/stalled-renderer text insertion, page/focus rejection, pointer and
|
|
84
|
+
keyboard input, native scrolling and cancellation. CI reruns this proof for
|
|
85
|
+
changes to the guest driver, image recipe, protocol or dependency lockfile. Its deterministic fixture is not a model participant,
|
|
86
|
+
a run bundle, a host network policy, an independent watchdog or a Linux/Mac
|
|
87
|
+
installed study. Those remain separate gates before local runtime support.
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# Local browser studies
|
|
2
|
+
|
|
3
|
+
Linux x64 and supported Apple Silicon Mac users can run isolated Firecracker
|
|
4
|
+
browser participants from the installed CLI or TUI. Docker manages their
|
|
5
|
+
containers and private state volumes; the normal study runner supplies
|
|
6
|
+
scheduling, recordings, Observer and findings.
|
|
7
|
+
No separate host service is installed.
|
|
8
|
+
|
|
9
|
+
## Start a study
|
|
10
|
+
|
|
11
|
+
Both platforms need a signed-in, supported Codex CLI. Linux needs a local,
|
|
12
|
+
rootful Docker Engine, KVM (`/dev/kvm`) and TUN (`/dev/net/tun`). Macs need an
|
|
13
|
+
M3-or-newer chip, native ARM64 Node, Lima 2.2+ (`brew install lima`) and a macOS
|
|
14
|
+
version supporting nested virtualization; see [Mac setup](#apple-silicon-macs).
|
|
15
|
+
Docker Desktop is unnecessary. See
|
|
16
|
+
[Codex account setup](restricted-codex-analysis.md) for the qualified version
|
|
17
|
+
and account restrictions. Docker access is an administrative capability.
|
|
18
|
+
Humanish does not install Docker on Linux or change host permissions. On Mac,
|
|
19
|
+
setup installs Docker only inside the dedicated Lima host.
|
|
20
|
+
|
|
21
|
+
Start your app on loopback, then save a lab such as
|
|
22
|
+
`.humanish/labs/local-browser.yaml`:
|
|
23
|
+
|
|
24
|
+
```yaml
|
|
25
|
+
schema: humanish.lab.v2
|
|
26
|
+
id: local-browser
|
|
27
|
+
title: Review the note editor
|
|
28
|
+
subject:
|
|
29
|
+
source: app-url
|
|
30
|
+
appUrl: http://127.0.0.1:3000
|
|
31
|
+
actors:
|
|
32
|
+
- type: local-agent
|
|
33
|
+
localAgent: codex
|
|
34
|
+
count: 2
|
|
35
|
+
mission: Create a note and explain anything confusing about saving it.
|
|
36
|
+
scenario:
|
|
37
|
+
mode: live
|
|
38
|
+
execution:
|
|
39
|
+
target: local
|
|
40
|
+
concurrency: 2
|
|
41
|
+
timeoutMs: 120000
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
```sh
|
|
45
|
+
npx humanish init --yes
|
|
46
|
+
npx humanish runtime status --json
|
|
47
|
+
npx humanish doctor --lab .humanish/labs/local-browser.yaml --json
|
|
48
|
+
npx humanish lab run .humanish/labs/local-browser.yaml
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
The first live run downloads the pinned runtime archive (about 569 MiB on x64 or
|
|
52
|
+
556 MiB on ARM64), verifies its exact size and SHA-256, and loads it into Docker.
|
|
53
|
+
Later runs reuse the image.
|
|
54
|
+
`humanish runtime setup` prepares it in advance. Status, doctor and dry-run never
|
|
55
|
+
download an image or launch a participant. Preparation does not consume the
|
|
56
|
+
participant's task-time budget. The TUI lists the same lab and runtime readiness;
|
|
57
|
+
starting it uses the same preparation and execution path.
|
|
58
|
+
|
|
59
|
+
This configuration needs neither an E2B key nor an OpenAI API key. Participants
|
|
60
|
+
and the separate post-run analyst use Codex account quota and **remote model
|
|
61
|
+
inference**. It is not an offline model. The restricted participant has no host
|
|
62
|
+
shell, checkout mount or credential files. Account dollar cost and output-token
|
|
63
|
+
ceilings are unknown; numeric dollar/token caps are rejected. Set
|
|
64
|
+
`review.analysis: false` to skip analysis.
|
|
65
|
+
|
|
66
|
+
For API billing and its supported caps, use `type: openai-computer-use`, remove
|
|
67
|
+
`localAgent`, and provide `OPENAI_API_KEY`. Its analysis retains the existing API
|
|
68
|
+
default. Neither path silently falls back to another provider or hosted desktop.
|
|
69
|
+
Existing labs without `execution.target: local` retain their previous behavior.
|
|
70
|
+
|
|
71
|
+
## Current limits
|
|
72
|
+
|
|
73
|
+
- Linux x64 or M3-or-newer Mac with native ARM64 Node and Lima. The installed
|
|
74
|
+
Mac journey was tested on an M5 Max; smaller machines are not capacity-qualified.
|
|
75
|
+
- On Linux, a local Docker Engine; remote contexts, rootless Docker and Docker
|
|
76
|
+
Desktop are unsupported. The Mac adapter uses Docker inside its own Lima host.
|
|
77
|
+
- Loopback HTTP(S) app URLs on explicit ports above 1023. Each participant can
|
|
78
|
+
reach its selected app port, plus public destinations over ordinary TCP/UDP.
|
|
79
|
+
Other private host/LAN destinations and cloud metadata are blocked.
|
|
80
|
+
- Chromium at 960×720, 2 vCPUs and 2 GiB guest RAM per participant. Docker's
|
|
81
|
+
enclosing memory limit is 3 GiB. Start with a small concurrency for your host;
|
|
82
|
+
these allocations are not a promise of measured peak memory or capacity.
|
|
83
|
+
- Browser-only. Inbox and camera/microphone declarations are rejected until
|
|
84
|
+
integrated. TAP/NAT networking preserves the path to optional media.
|
|
85
|
+
- A 20-minute default and maximum participant session budget, within the runtime
|
|
86
|
+
image's 30-minute process lifetime. A shorter `execution.timeoutMs` is supported.
|
|
87
|
+
- Codex participants currently use `gpt-6-astra` at low effort. Hosted templates,
|
|
88
|
+
device presets and hosted sandbox timeouts do not apply.
|
|
89
|
+
|
|
90
|
+
Normal close and cooperative startup cancellation remove the owned container
|
|
91
|
+
and its private state volume. After a desktop connects, controller death
|
|
92
|
+
disconnects the guest, which reboots; Firecracker exits and Docker removes both.
|
|
93
|
+
A small host socket directory can remain after abrupt death.
|
|
94
|
+
Run evidence remains in `.humanish/` under the normal local capture and sharing
|
|
95
|
+
rules. An unconfirmed release is reported as such.
|
|
96
|
+
|
|
97
|
+
## Runtime maintenance
|
|
98
|
+
|
|
99
|
+
The npm build pins a release URL, byte count, SHA-256 and immutable Docker image
|
|
100
|
+
ID in `src/local-runtime-release.ts`. It has no moving `latest` image dependency.
|
|
101
|
+
Runtime releases include source archives and notices separately; study users do
|
|
102
|
+
not download those archives. Updating a runtime requires a reviewed catalog
|
|
103
|
+
change and a new CLI release.
|
|
104
|
+
|
|
105
|
+
Source builders can use the
|
|
106
|
+
[maintained recipes](../../runtime/local-firecracker/README.md) and set
|
|
107
|
+
`HUMANISH_LOCAL_RUNTIME_IMAGE` to an already-built compatible local image. An
|
|
108
|
+
invalid override fails; it does not cause an implicit registry pull.
|
|
109
|
+
|
|
110
|
+
## Apple Silicon Macs
|
|
111
|
+
|
|
112
|
+
The Mac adapter uses a dedicated `humanish-runtime` Lima/VZ host on M3 or
|
|
113
|
+
newer Macs, with Lima 2.2+ and macOS supporting nested virtualization. Docker
|
|
114
|
+
runs inside that host; Docker Desktop is unnecessary. Setup creates the host
|
|
115
|
+
with 6 CPUs, 8 GiB RAM and an 80 GiB growable disk. It mounts no Mac directories.
|
|
116
|
+
Start with two participants; larger concurrency has not been qualified by this
|
|
117
|
+
integration. Use Lima's normal resource configuration for subsequent capacity
|
|
118
|
+
experiments, without changing study concurrency behind the user's back.
|
|
119
|
+
|
|
120
|
+
The scheduler and study loop remain shared. Standard OpenSSH forwards the
|
|
121
|
+
browser-control Unix socket to the Mac, and the selected app port back into the
|
|
122
|
+
Linux host. It preserves HTTP(S)/WebSocket bytes without parsing them. Codex
|
|
123
|
+
runs on the Mac and retains the same separate participant/analyst profiles and
|
|
124
|
+
file-backed login requirement. Keychain-only authentication is not supported.
|
|
125
|
+
|
|
126
|
+
The installed CLI passed first-attempt public image setup and two-participant
|
|
127
|
+
studies on an M5 Max: distinct app-side saves, overlapping participants,
|
|
128
|
+
verified recordings and automatic account analysis. A fresh Lima instance used
|
|
129
|
+
the public ARM64 catalog without a development image override. The separately
|
|
130
|
+
available source archives match that native build. The manually dispatched ARM64
|
|
131
|
+
job in `browser-appliance-proof.yml` builds images and sources; compilation alone
|
|
132
|
+
does not establish Mac execution.
|
|
133
|
+
|
|
134
|
+
Status and doctor do not create or start Lima. Explicit setup/first live use
|
|
135
|
+
starts the owned host; closing a study removes its participant containers and
|
|
136
|
+
volumes, but keeps the reusable Lima host running. Stop it with
|
|
137
|
+
`limactl stop humanish-runtime` when no studies are running. An interrupted
|
|
138
|
+
first provision remains inspectable through Lima and can be retried. Humanish
|
|
139
|
+
does not replace a conflicting instance or stop unrelated instances.
|
|
140
|
+
|
|
141
|
+
Normal close, cancellation and controller death were exercised on established
|
|
142
|
+
Mac desktops. Shared startup cancellation and interrupted create-reply recovery
|
|
143
|
+
were exercised against real Linux Docker/Firecracker, with a separate regression
|
|
144
|
+
check for Lima cleanup. Forced controller death during startup, full-study
|
|
145
|
+
cancellation, host sleep/wake and higher concurrency remain unqualified. A forced
|
|
146
|
+
kill before a desktop connects can leave resources requiring inspection; this
|
|
147
|
+
adapter adds no suspend detector that unconditionally destroys a study.
|
|
@@ -5,8 +5,10 @@ execution, with a separate conversation, process and tool authority. It can use
|
|
|
5
5
|
the same host Codex login as a local-agent participant. Existing API analysis
|
|
6
6
|
remains a separate provider.
|
|
7
7
|
|
|
8
|
-
The qualified launcher profile is **Codex CLI 0.154.0, Linux x64
|
|
9
|
-
ChatGPT login, `gpt-6-astra`, low reasoning effort**.
|
|
8
|
+
The qualified launcher profile is **Codex CLI 0.154.0, Linux x64 or Apple Silicon
|
|
9
|
+
macOS, file-backed ChatGPT login, `gpt-6-astra`, low reasoning effort**. The Mac
|
|
10
|
+
profile passed installed participant/analysis studies and the native dispatch
|
|
11
|
+
restriction check on an M5 Max. Other versions/platforms,
|
|
10
12
|
keychain-only logins and API-key Codex logins are refused before a model turn.
|
|
11
13
|
Readiness validates the installation and effective profile without submitting a
|
|
12
14
|
model turn; it does not guarantee current quota or model access.
|
|
@@ -34,8 +36,10 @@ host RPCs and asynchronous question messages before accepting any report. The
|
|
|
34
36
|
actual notification/denial captures and provenance are in
|
|
35
37
|
[`tests/fixtures/restricted-codex`](https://github.com/danielgwilson/humanish/blob/46330116726f74080fa18947c36da4fb4b333805/tests/fixtures/restricted-codex/README.md).
|
|
36
38
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
+
Each request owns a separate child process, temporary home and fresh thread;
|
|
40
|
+
participant, analyst and readiness requests may run concurrently. An unresolved
|
|
41
|
+
child process blocks new requests until its exit is confirmed. Each thread receives
|
|
42
|
+
one turn. Evidence is not silently
|
|
39
43
|
downselected: at most 128 images, 20 MiB decoded image data, and 32 MiB serialized
|
|
40
44
|
request data are admitted. Generated report text is limited to 2 MiB. Raw input
|
|
41
45
|
notifications echo image data URLs, so their frame budget is the larger of 2 MiB
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Runtime broker authority core
|
|
2
|
+
|
|
3
|
+
The source-only [broker core](https://github.com/danielgwilson/humanish/blob/main/runtime/broker/README.md)
|
|
4
|
+
defines bounded requests and lease decisions for a future Linux runtime owner.
|
|
5
|
+
It is not an installed service, resource controller, or public runtime mode.
|
|
6
|
+
|
|
7
|
+
Requests cannot supply host paths, service names, commands, user identities,
|
|
8
|
+
resource limits or cleanup claims. The future transport obtains the peer UID
|
|
9
|
+
from the operating system and checks it against owner policy. A separate
|
|
10
|
+
generation capability authorizes each study; default diagnostics and serialized
|
|
11
|
+
ledgers omit the raw capability. Repeating an acquisition or allocation attempt
|
|
12
|
+
does not mint a second resource.
|
|
13
|
+
|
|
14
|
+
The model reserves capacity through uncertain creation and cleanup. Expiry,
|
|
15
|
+
revocation, detected sleep and host-clock discontinuity cannot be undone by a
|
|
16
|
+
late renewal. A saved launch plan is not dispatch authority: the owner must
|
|
17
|
+
revalidate it immediately before starting a resource. Only a separate owner
|
|
18
|
+
attestation that creation has settled and the acquired resources are absent can
|
|
19
|
+
free a reservation. Recovery reads the ledger for reconciliation, never to resume
|
|
20
|
+
a study or adopt resources by their names.
|
|
21
|
+
|
|
22
|
+
The owner must persist intent before consuming effects, advance trusted time
|
|
23
|
+
independently of requests, and bind every resource to actual acquired OS
|
|
24
|
+
identities. The pure model does none of those OS operations. Its tests establish
|
|
25
|
+
protocol and state transitions; they do not establish peer authentication,
|
|
26
|
+
durable writes, process containment, watchdog timing, sleep detection or cleanup.
|
|
27
|
+
|
|
28
|
+
Installation, root-owned storage, authenticated sockets, service supervision,
|
|
29
|
+
artifact verification and VM/network control require separate implementation
|
|
30
|
+
and privileged qualification. The existing npm execution routes are unchanged.
|
|
@@ -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.
|
|
6
|
+
`0.99.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.
|
package/docs/goals/current.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# Current Goals
|
|
2
2
|
|
|
3
|
-
Status date: 2026-09-
|
|
3
|
+
Status date: 2026-09-24. Release baseline: `0.99.0`.
|
|
4
4
|
|
|
5
5
|
This page guides work on current merged source. Published behavior is described
|
|
6
|
-
in the [release notes](../release/0.
|
|
6
|
+
in the [release notes](../release/0.99.0-local-browser-mac.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.
|
|
91
|
+
## Current Program Truth (source `0.99.0`)
|
|
92
92
|
|
|
93
93
|
| Surface | Available in merged source | Remaining boundary |
|
|
94
94
|
| --- | --- | --- |
|
|
@@ -99,21 +99,33 @@ 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; explicit restricted Codex account analysis on
|
|
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 qualified Linux x64 and Apple Silicon Mac profiles | Account dollars/output-token caps are unavailable; 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
|
+
| Local browsers | Shared study loop on Linux x64/Docker/KVM and M3-or-newer Mac/Lima; pinned runtime download, Codex account participants and automatic analysis | Browser-only, explicit local labs; local inbox/media and automatic onboarding remain follow-ups; larger cohorts and sleep/wake are unqualified |
|
|
105
106
|
| 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 |
|
|
106
107
|
|
|
107
108
|
Use the [task support matrix](../architecture/task-protocol-support.md),
|
|
108
109
|
[actor registry](https://github.com/danielgwilson/humanish/blob/main/src/actor-registry.ts)
|
|
109
110
|
and [CLI reference](https://humanish.dev/docs/cli) when choosing a concrete path.
|
|
110
|
-
Source
|
|
111
|
+
Source and tests establish observed behavior. Resolve conflicts with requirements
|
|
112
|
+
explicitly; neither stale status prose nor a passing test makes a bug correct.
|
|
111
113
|
|
|
112
114
|
The library-assisted `local-app` route now includes a
|
|
113
115
|
[runnable npm example](../architecture/examples/state-driven-local-app/README.md).
|
|
114
116
|
Its deterministic provider demonstrates the integration with a real loopback
|
|
115
117
|
app; it does not establish persona effectiveness or independent adoption.
|
|
116
118
|
|
|
119
|
+
The [local browser runtime](../architecture/local-browser-runtime.md)
|
|
120
|
+
runs isolated Linux browser participants through the same scheduler, recordings
|
|
121
|
+
and automatic analysis as hosted studies. It uses Docker-owned resources and
|
|
122
|
+
ordinary TAP/NAT networking. Continue managed-local work from this complete study
|
|
123
|
+
path; the earlier offline owner/service qualification experiments are historical
|
|
124
|
+
fixtures, not an installation architecture or a prerequisite queue. Explicit
|
|
125
|
+
Linux local labs now use the installed CLI/TUI, with a verified runtime download
|
|
126
|
+
before the first live run. Mac support, inbox integration and optional media
|
|
127
|
+
remain unfinished. Existing hosted labs retain their behavior.
|
|
128
|
+
|
|
117
129
|
## Gates And Deferred Work
|
|
118
130
|
|
|
119
131
|
- Live OSS meta-lab execution remains disabled until repository-derived
|
|
@@ -135,10 +147,12 @@ app; it does not establish persona effectiveness or independent adoption.
|
|
|
135
147
|
Follow [AGENTS.md](../../AGENTS.md), the [invariants](../principles/invariants-and-defaults.md)
|
|
136
148
|
and the [public-readiness standard](../release/public-readiness-standard.md).
|
|
137
149
|
|
|
138
|
-
- Keep `main` clean and work on scoped branches/worktrees.
|
|
139
|
-
|
|
150
|
+
- Keep `main` clean and work on scoped branches/worktrees. Keep the task's scope,
|
|
151
|
+
authority, relevant checks and material failure boundaries in its issue, PR or
|
|
152
|
+
current handoff; do not create a separate packet for routine work.
|
|
140
153
|
- Existing explicit shipping authority governs implementation and merge;
|
|
141
|
-
otherwise issue readiness does not create authority by itself.
|
|
154
|
+
otherwise issue readiness does not create authority by itself. Machine-readiness
|
|
155
|
+
fields gate automated queue pickup, not directly assigned interactive work.
|
|
142
156
|
- Never commit secrets, private transcripts/screenshots, customer data or
|
|
143
157
|
private project context. Keep generated proof in ignored `.humanish/` and
|
|
144
158
|
retain needed evidence before removing a worktree.
|
|
@@ -153,7 +167,10 @@ and the [public-readiness standard](../release/public-readiness-standard.md).
|
|
|
153
167
|
|
|
154
168
|
## Proof Before Shipping
|
|
155
169
|
|
|
156
|
-
|
|
170
|
+
Use the [verification guidance](../../AGENTS.md#verification): check the changed
|
|
171
|
+
behavior and material risks, then stop unless new evidence warrants more work.
|
|
172
|
+
Required CI remains the merge gate. For a release, run the full release gates
|
|
173
|
+
from a clean contributor worktree:
|
|
157
174
|
|
|
158
175
|
```bash
|
|
159
176
|
pnpm install --frozen-lockfile
|
|
@@ -235,3 +235,10 @@ them should install `@e2b/desktop` explicitly instead of receiving that
|
|
|
235
235
|
substrate as part of the default Humanish package install. When a GitHub token is
|
|
236
236
|
present, repo labels are redacted in durable artifacts by default; live stream
|
|
237
237
|
auth URLs are used only by the attached watch server and are not persisted.
|
|
238
|
+
|
|
239
|
+
An explicitly selected [local browser lab](../architecture/local-browser-runtime.md)
|
|
240
|
+
can instead use Linux x64, Docker/KVM and an existing Codex ChatGPT login for
|
|
241
|
+
participants and findings. The installed CLI prepares its pinned image before
|
|
242
|
+
the first live run. It does not install host prerequisites, and Mac, inbox and
|
|
243
|
+
media integration remain separate follow-ups. Existing hosted lab configuration
|
|
244
|
+
is preserved.
|
package/docs/ramp/README.md
CHANGED
|
@@ -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.
|
|
5
|
+
Package/source version in this tree: `0.99.0` (2026-09-24). 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
|
|
@@ -14,19 +14,26 @@ context.
|
|
|
14
14
|
|
|
15
15
|
## First Read
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
Start with three things:
|
|
18
18
|
|
|
19
|
-
1. [`AGENTS.md`](../../AGENTS.md) for
|
|
20
|
-
2. [`docs/
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
19
|
+
1. [`AGENTS.md`](../../AGENTS.md) for engineering judgment and public boundaries.
|
|
20
|
+
2. The current task and [`docs/goals/current.md`](../goals/current.md) for current
|
|
21
|
+
product status. Explicit task direction takes precedence over historical queues.
|
|
22
|
+
3. Instructions in the component being changed, then its relevant contracts.
|
|
23
|
+
|
|
24
|
+
Use the references below as needed. Historical plans are context, not a backlog
|
|
25
|
+
to resume automatically. Keep one concise current task handoff with the requested
|
|
26
|
+
outcome, demonstrated behavior, next complete result, constraints and rejected or
|
|
27
|
+
deferred approaches; link evidence rather than repeating its chronology.
|
|
28
|
+
|
|
29
|
+
| When working on | Reference |
|
|
30
|
+
| --- | --- |
|
|
31
|
+
| Install, commands or first-run UX | [`README.md`](../../README.md), [install experience](../product/open-source-install-experience.md) |
|
|
32
|
+
| Security, evidence handling or defaults | [Invariants and defaults](../principles/invariants-and-defaults.md) |
|
|
33
|
+
| Observer | [Observer architecture](../architecture/observer.md) and its component instructions |
|
|
34
|
+
| Bundle formats or policy | [Run bundle](../contracts/run-bundle.md), [policy](../contracts/policy.md) |
|
|
35
|
+
| Public artifacts or packaging | [Public-readiness standard](../release/public-readiness-standard.md), [release procedure](../release/open-source-readiness.md) |
|
|
36
|
+
| Proof architecture or historical decisions | [Proof roadmap](https://github.com/danielgwilson/humanish/blob/main/docs/goals/proof-roadmap/goal.md), [historical delivery roadmap](../roadmap/world-class-open-source-v0.md) |
|
|
30
37
|
|
|
31
38
|
## Mental Model
|
|
32
39
|
|
|
@@ -47,6 +54,14 @@ If a change does not improve one of those loops, it probably belongs elsewhere.
|
|
|
47
54
|
|
|
48
55
|
## Current State
|
|
49
56
|
|
|
57
|
+
The [0.99.0 release note](../release/0.99.0-local-browser-mac.md) describes
|
|
58
|
+
local browser studies on supported Apple Silicon Macs through Lima, public ARM
|
|
59
|
+
runtime setup, Codex account participants and automatic analysis.
|
|
60
|
+
|
|
61
|
+
The [0.98.0 release note](../release/0.98.0-local-browser-studies.md) describes
|
|
62
|
+
installed Linux browser studies with managed runtime images, Codex account
|
|
63
|
+
participants and automatic analysis, and shared CLI/TUI setup checks.
|
|
64
|
+
|
|
50
65
|
The [0.97.0 release note](../release/0.97.0-codex-account-analysis.md) describes
|
|
51
66
|
explicit Codex account analysis on a qualified Linux CLI/login profile, with
|
|
52
67
|
separate analyst authority, evidence-linked reports and unknown-dollar accounting.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# 0.98.0 — Local browser studies on Linux
|
|
2
|
+
|
|
3
|
+
Explicit local browser labs now run from the installed CLI and TUI. On Linux
|
|
4
|
+
x64 with Docker/KVM and a supported Codex ChatGPT login, isolated Firecracker
|
|
5
|
+
participants use the normal scheduler, recordings, Observer and automatic
|
|
6
|
+
analysis without E2B or OpenAI API keys. Codex inference remains remote and
|
|
7
|
+
consumes account quota; dollar cost is unknown.
|
|
8
|
+
|
|
9
|
+
`humanish runtime setup` prepares a pinned, verified runtime image. A live local
|
|
10
|
+
lab also prepares it automatically before starting participants. `runtime status`
|
|
11
|
+
and `doctor --lab` inspect readiness without downloading or launching a browser.
|
|
12
|
+
The TUI shows that same runtime status. Existing hosted labs retain their
|
|
13
|
+
configuration, and a missing local prerequisite never selects another provider.
|
|
14
|
+
|
|
15
|
+
The [setup guide](../architecture/local-browser-runtime.md) includes a complete
|
|
16
|
+
manifest and the current limits. This release supports loopback apps, fixed
|
|
17
|
+
960×720 Chromium desktops, and optional OpenAI API participants. Mac/Lima,
|
|
18
|
+
local inboxes and local camera/microphone integration remain follow-ups.
|
|
19
|
+
|
|
20
|
+
Private state uses a Docker-owned anonymous volume, removed with its container
|
|
21
|
+
on normal close or controller death. Runtime image downloads are checked for
|
|
22
|
+
exact size and SHA-256 before loading; matching source archives and notices
|
|
23
|
+
are distributed separately.
|
|
24
|
+
|
|
25
|
+
Validation includes a packed installation outside the checkout: two concurrent
|
|
26
|
+
Codex participants saved distinct notes in a local app, the app confirmed both
|
|
27
|
+
saves, the recordings verified, and automatic analysis completed without model
|
|
28
|
+
or desktop API keys. Separate checks cover controller death and state-volume
|
|
29
|
+
removal, download integrity/cancellation, missing prerequisites and preserving
|
|
30
|
+
existing hosted configurations. This is a small Linux integration proof, not
|
|
31
|
+
a claim about Mac readiness, high concurrency or real conferencing apps.
|