humanish 0.106.1 → 0.108.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 (668) hide show
  1. package/ARCHITECTURE.md +38 -32
  2. package/CHANGELOG.md +28 -0
  3. package/CONTEXT.md +51 -41
  4. package/README.md +152 -174
  5. package/SECURITY.md +16 -26
  6. package/TELEMETRY.md +8 -6
  7. package/dist/actors/affordance.d.ts +4 -4
  8. package/dist/actors/affordance.js +12 -12
  9. package/dist/actors/agent-session.d.ts +2 -2
  10. package/dist/actors/agent-session.js +7 -7
  11. package/dist/actors/codex/app-server-actor-trace.d.ts +1 -1
  12. package/dist/actors/codex/app-server-actor-trace.js +1 -1
  13. package/dist/actors/codex/app-server-client.js +2 -1
  14. package/dist/actors/codex/app-server-trace.d.ts +0 -1
  15. package/dist/actors/codex/app-server-trace.js +1 -3
  16. package/dist/actors/codex/app-server-ui.js +1 -1
  17. package/dist/actors/codex/app-server.js +2 -1
  18. package/dist/actors/codex/codex-admission.d.ts +91 -0
  19. package/dist/actors/codex/codex-admission.js +150 -0
  20. package/dist/actors/codex/protocol-compat.d.ts +27 -0
  21. package/dist/actors/codex/protocol-compat.js +357 -0
  22. package/dist/actors/codex/protocol-contract.d.ts +61 -0
  23. package/dist/actors/codex/protocol-contract.js +471 -0
  24. package/dist/actors/codex/restricted-executable.d.ts +28 -4
  25. package/dist/actors/codex/restricted-executable.js +104 -29
  26. package/dist/actors/codex/restricted-launch.d.ts +9 -2
  27. package/dist/actors/codex/restricted-launch.js +43 -4
  28. package/dist/actors/codex/restricted-notifications.d.ts +101 -0
  29. package/dist/actors/codex/restricted-notifications.js +277 -0
  30. package/dist/actors/codex/restricted-participant.d.ts +30 -0
  31. package/dist/actors/codex/restricted-participant.js +66 -6
  32. package/dist/actors/codex/restricted-policy.d.ts +11 -3
  33. package/dist/actors/codex/restricted-policy.js +2 -2
  34. package/dist/actors/codex/restricted-session.d.ts +16 -3
  35. package/dist/actors/codex/restricted-session.js +60 -22
  36. package/dist/actors/codex/restricted-transport.d.ts +29 -0
  37. package/dist/actors/codex/restricted-transport.js +139 -27
  38. package/dist/actors/codex/restricted-turn.d.ts +19 -4
  39. package/dist/actors/codex/restricted-turn.js +43 -30
  40. package/dist/actors/computer-use/actor.d.ts +17 -17
  41. package/dist/actors/computer-use/actor.js +6 -6
  42. package/dist/actors/computer-use/admission-limit.d.ts +1 -1
  43. package/dist/actors/computer-use/admission-limit.js +1 -1
  44. package/dist/actors/computer-use/loop/actions.d.ts +3 -3
  45. package/dist/actors/computer-use/loop/actions.js +10 -10
  46. package/dist/actors/computer-use/loop/backstop.d.ts +3 -3
  47. package/dist/actors/computer-use/loop/backstop.js +15 -13
  48. package/dist/actors/computer-use/loop/ending.d.ts +7 -7
  49. package/dist/actors/computer-use/loop/ending.js +9 -9
  50. package/dist/actors/computer-use/loop/observation.d.ts +2 -2
  51. package/dist/actors/computer-use/loop/observation.js +9 -9
  52. package/dist/actors/computer-use/loop/provider-call.d.ts +1 -1
  53. package/dist/actors/computer-use/loop/provider-call.js +1 -1
  54. package/dist/actors/computer-use/loop/session.js +3 -3
  55. package/dist/actors/computer-use/loop/spend.d.ts +2 -2
  56. package/dist/actors/computer-use/loop/spend.js +4 -4
  57. package/dist/actors/computer-use/loop/trace.js +11 -10
  58. package/dist/actors/computer-use/loop/types.d.ts +37 -26
  59. package/dist/actors/computer-use/loop/usage.js +2 -2
  60. package/dist/actors/computer-use/loop.js +4 -4
  61. package/dist/actors/computer-use/openai-context.d.ts +37 -0
  62. package/dist/actors/computer-use/openai-context.js +214 -0
  63. package/dist/actors/computer-use/openai-provider.d.ts +12 -9
  64. package/dist/actors/computer-use/openai-provider.js +47 -36
  65. package/dist/actors/computer-use/openai-requests.d.ts +36 -10
  66. package/dist/actors/computer-use/openai-requests.js +82 -15
  67. package/dist/actors/computer-use/openai-wire.d.ts +19 -7
  68. package/dist/actors/computer-use/openai-wire.js +36 -34
  69. package/dist/actors/contract.d.ts +86 -49
  70. package/dist/actors/contract.js +29 -23
  71. package/dist/actors/local-agent/claude-session.d.ts +1 -1
  72. package/dist/actors/local-agent/claude-session.js +10 -9
  73. package/dist/actors/local-agent/cli.d.ts +8 -6
  74. package/dist/actors/local-agent/cli.js +24 -28
  75. package/dist/actors/local-agent/readiness.d.ts +2 -2
  76. package/dist/actors/local-agent/readiness.js +4 -4
  77. package/dist/actors/reasoning-effort.js +6 -6
  78. package/dist/actors/registry.d.ts +10 -10
  79. package/dist/actors/registry.js +18 -17
  80. package/dist/actors/scripted-browser/actor.d.ts +8 -8
  81. package/dist/actors/scripted-browser/actor.js +16 -16
  82. package/dist/actors/scripted-browser/browser-command.js +1 -1
  83. package/dist/actors/scripted-browser/journey.js +15 -4
  84. package/dist/actors/scripted-browser/steps.js +19 -1
  85. package/dist/actors/scripted-browser/types.d.ts +12 -2
  86. package/dist/actors/stop-conditions.d.ts +1 -1
  87. package/dist/actors/stop-conditions.js +1 -3
  88. package/dist/analysis/automatic-completion.d.ts +13 -8
  89. package/dist/analysis/automatic-completion.js +14 -8
  90. package/dist/analysis/automatic-config.d.ts +1 -1
  91. package/dist/analysis/automatic-config.js +2 -2
  92. package/dist/analysis/automatic.d.ts +10 -4
  93. package/dist/analysis/automatic.js +17 -13
  94. package/dist/analysis/codex-config.d.ts +6 -2
  95. package/dist/analysis/codex-config.js +22 -14
  96. package/dist/analysis/diagnostics.d.ts +23 -0
  97. package/dist/analysis/diagnostics.js +112 -0
  98. package/dist/analysis/evidence-sources.js +2 -2
  99. package/dist/analysis/evidence.js +6 -6
  100. package/dist/analysis/execute.d.ts +7 -1
  101. package/dist/analysis/execute.js +39 -12
  102. package/dist/analysis/job.d.ts +8 -5
  103. package/dist/analysis/job.js +15 -14
  104. package/dist/analysis/load.d.ts +1 -1
  105. package/dist/analysis/load.js +5 -5
  106. package/dist/analysis/provider.d.ts +9 -1
  107. package/dist/analysis/restricted-codex.d.ts +2 -0
  108. package/dist/analysis/restricted-codex.js +10 -1
  109. package/dist/analysis/service.d.ts +2 -0
  110. package/dist/analysis/service.js +35 -16
  111. package/dist/analysis/sharing.d.ts +2 -2
  112. package/dist/analysis/sharing.js +5 -5
  113. package/dist/analysis/store-executions.d.ts +5 -5
  114. package/dist/analysis/store-executions.js +12 -12
  115. package/dist/analysis/store.d.ts +4 -4
  116. package/dist/analysis/store.js +13 -13
  117. package/dist/cli/commands/analysis-signals.d.ts +2 -1
  118. package/dist/cli/commands/analysis-signals.js +4 -1
  119. package/dist/cli/commands/analyze.js +23 -18
  120. package/dist/cli/commands/codex.js +9 -9
  121. package/dist/cli/commands/comms.js +62 -34
  122. package/dist/cli/commands/feedback.js +20 -21
  123. package/dist/cli/commands/lab-format.d.ts +5 -4
  124. package/dist/cli/commands/lab-format.js +35 -23
  125. package/dist/cli/commands/lab-route-computer-use.d.ts +0 -2
  126. package/dist/cli/commands/lab-route-computer-use.js +32 -21
  127. package/dist/cli/commands/lab-route-preview.d.ts +1 -3
  128. package/dist/cli/commands/lab-route-preview.js +7 -7
  129. package/dist/cli/commands/lab-route-run.d.ts +6 -4
  130. package/dist/cli/commands/lab-route-run.js +6 -2
  131. package/dist/cli/commands/lab-route-scripted.d.ts +0 -2
  132. package/dist/cli/commands/lab-route-scripted.js +0 -1
  133. package/dist/cli/commands/lab-route-shared-world.d.ts +0 -2
  134. package/dist/cli/commands/lab-route-shared-world.js +3 -4
  135. package/dist/cli/commands/lab-route-terminal.d.ts +0 -2
  136. package/dist/cli/commands/lab-route-terminal.js +0 -1
  137. package/dist/cli/commands/lab-run.js +84 -54
  138. package/dist/cli/commands/lab-scorer.d.ts +2 -4
  139. package/dist/cli/commands/lab-scorer.js +1 -1
  140. package/dist/cli/commands/migrate.d.ts +4 -0
  141. package/dist/cli/commands/migrate.js +65 -0
  142. package/dist/cli/commands/observe.js +168 -107
  143. package/dist/cli/commands/run-command.d.ts +10 -0
  144. package/dist/cli/commands/run-command.js +85 -0
  145. package/dist/cli/commands/run-signals.d.ts +30 -0
  146. package/dist/cli/commands/run-signals.js +146 -0
  147. package/dist/cli/commands/runs.js +137 -136
  148. package/dist/cli/commands/setup.d.ts +2 -2
  149. package/dist/cli/commands/setup.js +26 -21
  150. package/dist/cli/commands/study.d.ts +3 -0
  151. package/dist/cli/commands/study.js +182 -0
  152. package/dist/cli/commands/tui.d.ts +4 -4
  153. package/dist/cli/commands/tui.js +21 -21
  154. package/dist/cli/commands/watch.js +64 -77
  155. package/dist/cli/deprecations.d.ts +18 -0
  156. package/dist/cli/deprecations.js +48 -0
  157. package/dist/cli/doctor.d.ts +18 -5
  158. package/dist/cli/doctor.js +111 -48
  159. package/dist/cli/first-run-path.d.ts +12 -10
  160. package/dist/cli/first-run-path.js +30 -28
  161. package/dist/cli/io.d.ts +46 -10
  162. package/dist/cli/io.js +109 -30
  163. package/dist/cli/observer-follow.d.ts +2 -2
  164. package/dist/cli/observer-follow.js +5 -6
  165. package/dist/cli/orientation.d.ts +6 -3
  166. package/dist/cli/orientation.js +43 -39
  167. package/dist/cli/product-sentence.d.ts +6 -0
  168. package/dist/cli/product-sentence.js +6 -0
  169. package/dist/cli/program.d.ts +6 -1
  170. package/dist/cli/program.js +112 -43
  171. package/dist/cli/telemetry.d.ts +17 -17
  172. package/dist/cli/telemetry.js +49 -41
  173. package/dist/cli.js +1 -1
  174. package/dist/comms/capture-surface.d.ts +14 -13
  175. package/dist/comms/capture-surface.js +23 -22
  176. package/dist/comms/catch-host.d.ts +8 -8
  177. package/dist/comms/catch-host.js +14 -14
  178. package/dist/comms/connections.js +4 -4
  179. package/dist/comms/email-catch.d.ts +3 -3
  180. package/dist/comms/email-catch.js +8 -8
  181. package/dist/comms/external-evidence.d.ts +27 -0
  182. package/dist/comms/external-evidence.js +93 -0
  183. package/dist/comms/extract.js +2 -2
  184. package/dist/comms/fake-inbox.d.ts +2 -2
  185. package/dist/comms/fake-inbox.js +2 -2
  186. package/dist/comms/lease-store.js +7 -7
  187. package/dist/comms/receiving-render.d.ts +1 -1
  188. package/dist/comms/receiving-render.js +2 -2
  189. package/dist/comms/sandbox-catch-script.d.ts +6 -6
  190. package/dist/comms/sandbox-catch-script.js +6 -6
  191. package/dist/comms/sandbox-catch.d.ts +36 -37
  192. package/dist/comms/sandbox-catch.js +34 -35
  193. package/dist/comms/setup.js +42 -8
  194. package/dist/comms/thread-evidence.d.ts +1 -1
  195. package/dist/comms/thread-evidence.js +6 -6
  196. package/dist/comms/types.d.ts +6 -6
  197. package/dist/comms/types.js +4 -4
  198. package/dist/evidence/browser-hygiene.d.ts +1 -1
  199. package/dist/evidence/browser-hygiene.js +1 -1
  200. package/dist/evidence/frame-signature.d.ts +1 -1
  201. package/dist/evidence/frame-signature.js +4 -4
  202. package/dist/evidence/redaction.d.ts +3 -3
  203. package/dist/evidence/redaction.js +5 -5
  204. package/dist/evidence/secret-scrub.d.ts +9 -0
  205. package/dist/evidence/secret-scrub.js +96 -0
  206. package/dist/feedback/draft.js +41 -85
  207. package/dist/feedback/export-bundle.js +5 -5
  208. package/dist/feedback/export.d.ts +5 -1
  209. package/dist/feedback/export.js +16 -17
  210. package/dist/feedback/feedback.d.ts +3 -3
  211. package/dist/feedback/feedback.js +21 -3
  212. package/dist/guest/chromium-text.js +2 -2
  213. package/dist/guest/desktop-native.d.ts +1 -1
  214. package/dist/guest/runtime.js +1 -1
  215. package/dist/index.d.ts +14 -15
  216. package/dist/index.js +10 -11
  217. package/dist/keys/key-resolution.d.ts +7 -5
  218. package/dist/keys/key-resolution.js +40 -38
  219. package/dist/lab/adapter-extension.d.ts +35 -13
  220. package/dist/lab/adapter-extension.js +50 -134
  221. package/dist/lab/adapter-scorer-loader.d.ts +32 -12
  222. package/dist/lab/adapter-scorer-loader.js +56 -32
  223. package/dist/lab/composition-rules.js +58 -58
  224. package/dist/lab/config.js +85 -43
  225. package/dist/lab/deprecated-fields.d.ts +10 -0
  226. package/dist/lab/deprecated-fields.js +24 -0
  227. package/dist/lab/device-presets.d.ts +10 -10
  228. package/dist/lab/device-presets.js +11 -11
  229. package/dist/lab/discover.d.ts +13 -9
  230. package/dist/lab/discover.js +118 -60
  231. package/dist/lab/doctor.d.ts +53 -11
  232. package/dist/lab/doctor.js +193 -47
  233. package/dist/lab/init-plan.js +1 -3
  234. package/dist/lab/init-templates.js +147 -147
  235. package/dist/lab/init.d.ts +1 -1
  236. package/dist/lab/init.js +41 -9
  237. package/dist/lab/keys.d.ts +2 -0
  238. package/dist/lab/keys.js +43 -9
  239. package/dist/lab/lab-deps.d.ts +80 -0
  240. package/dist/lab/lab-deps.js +4 -0
  241. package/dist/lab/parse/actors.js +17 -16
  242. package/dist/lab/parse/comms.js +8 -7
  243. package/dist/lab/parse/execution.js +15 -14
  244. package/dist/lab/parse/study-v3.d.ts +23 -0
  245. package/dist/lab/parse/study-v3.js +259 -0
  246. package/dist/lab/parse/subject-state.d.ts +7 -7
  247. package/dist/lab/parse/subject-state.js +18 -17
  248. package/dist/lab/parse/subject.js +30 -29
  249. package/dist/lab/parse/values.d.ts +1 -2
  250. package/dist/lab/parse/values.js +3 -6
  251. package/dist/lab/persona-resolve.d.ts +7 -7
  252. package/dist/lab/persona-resolve.js +8 -8
  253. package/dist/lab/persona.js +1 -3
  254. package/dist/lab/plan-base.d.ts +0 -2
  255. package/dist/lab/plan-base.js +6 -4
  256. package/dist/lab/plan-participants.d.ts +7 -7
  257. package/dist/lab/plan-participants.js +2 -2
  258. package/dist/lab/plan-types.d.ts +26 -8
  259. package/dist/lab/plan.d.ts +4 -18
  260. package/dist/lab/plan.js +24 -79
  261. package/dist/lab/preflight-probes.js +11 -11
  262. package/dist/lab/preflight-result.d.ts +2 -1
  263. package/dist/lab/preflight-result.js +5 -6
  264. package/dist/lab/preflight.d.ts +7 -8
  265. package/dist/lab/preflight.js +6 -6
  266. package/dist/lab/requirements.d.ts +20 -0
  267. package/dist/lab/requirements.js +54 -0
  268. package/dist/lab/route-inputs.d.ts +23 -12
  269. package/dist/lab/route-inputs.js +48 -51
  270. package/dist/lab/routing.d.ts +42 -41
  271. package/dist/lab/routing.js +66 -68
  272. package/dist/lab/run-lab-events.d.ts +3 -11
  273. package/dist/lab/run-lab-events.js +2 -16
  274. package/dist/lab/run-lab-homes.d.ts +76 -0
  275. package/dist/lab/run-lab-homes.js +7 -0
  276. package/dist/lab/run-lab-options.d.ts +12 -66
  277. package/dist/lab/run-lab-options.js +58 -285
  278. package/dist/lab/summary.d.ts +15 -9
  279. package/dist/lab/summary.js +24 -17
  280. package/dist/lab/tasks.d.ts +15 -15
  281. package/dist/lab/tasks.js +14 -14
  282. package/dist/lab/types.d.ts +201 -195
  283. package/dist/lab/types.js +2 -0
  284. package/dist/lab/validation.d.ts +21 -21
  285. package/dist/lab/validation.js +61 -59
  286. package/dist/lab/warnings.d.ts +10 -0
  287. package/dist/lab/warnings.js +70 -41
  288. package/dist/library-aliases.d.ts +56 -0
  289. package/dist/library-aliases.js +22 -0
  290. package/dist/observer/artifact.d.ts +2 -2
  291. package/dist/observer/artifact.js +9 -9
  292. package/dist/observer/data.d.ts +6 -6
  293. package/dist/observer/data.js +7 -6
  294. package/dist/observer/exposure.d.ts +1 -1
  295. package/dist/observer/exposure.js +11 -11
  296. package/dist/observer/http.js +1 -1
  297. package/dist/observer/library.d.ts +1 -1
  298. package/dist/observer/library.js +4 -2
  299. package/dist/observer/listen.js +5 -4
  300. package/dist/observer/render.d.ts +1 -1
  301. package/dist/observer/render.js +12 -7
  302. package/dist/observer/run-routes.d.ts +4 -4
  303. package/dist/observer/run-routes.js +6 -6
  304. package/dist/observer/serve.d.ts +17 -0
  305. package/dist/observer/serve.js +41 -6
  306. package/dist/observer/tunnel.js +1 -1
  307. package/dist/observer-app.html +4 -4
  308. package/dist/routes/computer-use/bundle-parts.d.ts +9 -9
  309. package/dist/routes/computer-use/bundle-parts.js +24 -17
  310. package/dist/routes/computer-use/bundle.d.ts +4 -11
  311. package/dist/routes/computer-use/bundle.js +12 -18
  312. package/dist/routes/computer-use/diagnostics.d.ts +1 -1
  313. package/dist/routes/computer-use/diagnostics.js +1 -1
  314. package/dist/routes/computer-use/e2b-desktop/comms.d.ts +11 -11
  315. package/dist/routes/computer-use/e2b-desktop/comms.js +24 -27
  316. package/dist/routes/computer-use/e2b-desktop/desktop.d.ts +2 -2
  317. package/dist/routes/computer-use/e2b-desktop/desktop.js +8 -11
  318. package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +16 -15
  319. package/dist/routes/computer-use/e2b-desktop/fidelity.js +20 -19
  320. package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +3 -3
  321. package/dist/routes/computer-use/e2b-desktop/prepare.js +40 -43
  322. package/dist/routes/computer-use/e2b-desktop/start.d.ts +1 -1
  323. package/dist/routes/computer-use/e2b-desktop/start.js +32 -30
  324. package/dist/routes/computer-use/e2b-desktop/state.d.ts +5 -4
  325. package/dist/routes/computer-use/e2b-desktop/state.js +5 -3
  326. package/dist/routes/computer-use/e2b-desktop/teardown.d.ts +1 -1
  327. package/dist/routes/computer-use/e2b-desktop/teardown.js +33 -20
  328. package/dist/routes/computer-use/external-comms.d.ts +4 -4
  329. package/dist/routes/computer-use/external-comms.js +19 -43
  330. package/dist/routes/computer-use/fanout-bundle.d.ts +3 -3
  331. package/dist/routes/computer-use/fanout-bundle.js +38 -42
  332. package/dist/routes/computer-use/{fanout-lanes.js → fanout-records.js} +33 -28
  333. package/dist/routes/computer-use/in-process-desktop.d.ts +3 -10
  334. package/dist/routes/computer-use/in-process-desktop.js +3 -9
  335. package/dist/routes/computer-use/live-flush.d.ts +7 -5
  336. package/dist/routes/computer-use/live-flush.js +20 -28
  337. package/dist/routes/computer-use/{run-lanes.d.ts → live-phase.d.ts} +4 -2
  338. package/dist/routes/computer-use/{run-lanes.js → live-phase.js} +17 -16
  339. package/dist/routes/computer-use/local-tree-pack.d.ts +3 -3
  340. package/dist/routes/computer-use/local-tree-pack.js +4 -5
  341. package/dist/routes/computer-use/local-vm.d.ts +11 -8
  342. package/dist/routes/computer-use/local-vm.js +40 -67
  343. package/dist/routes/computer-use/participant-desktop.d.ts +8 -23
  344. package/dist/routes/computer-use/participant-desktop.js +5 -25
  345. package/dist/routes/computer-use/{lanes.d.ts → participant-execution.d.ts} +11 -11
  346. package/dist/routes/computer-use/{lanes.js → participant-execution.js} +39 -26
  347. package/dist/routes/computer-use/participant-facts.d.ts +7 -1
  348. package/dist/routes/computer-use/participant-facts.js +12 -1
  349. package/dist/routes/computer-use/participant-model.d.ts +25 -11
  350. package/dist/routes/computer-use/participant-model.js +76 -34
  351. package/dist/routes/computer-use/participant-prompt.d.ts +13 -13
  352. package/dist/routes/computer-use/participant-prompt.js +8 -8
  353. package/dist/routes/computer-use/participant-runs.d.ts +11 -11
  354. package/dist/routes/computer-use/participant-runs.js +18 -18
  355. package/dist/routes/computer-use/plan.d.ts +21 -29
  356. package/dist/routes/computer-use/plan.js +70 -78
  357. package/dist/routes/computer-use/preflight.d.ts +3 -5
  358. package/dist/routes/computer-use/preflight.js +40 -36
  359. package/dist/routes/computer-use/rerun-selection.js +11 -7
  360. package/dist/routes/computer-use/result.d.ts +1 -1
  361. package/dist/routes/computer-use/result.js +48 -38
  362. package/dist/routes/computer-use/route.d.ts +5 -5
  363. package/dist/routes/computer-use/route.js +36 -33
  364. package/dist/routes/computer-use/self-report.d.ts +8 -8
  365. package/dist/routes/computer-use/self-report.js +33 -33
  366. package/dist/routes/computer-use/setup.d.ts +9 -15
  367. package/dist/routes/computer-use/setup.js +106 -83
  368. package/dist/routes/computer-use/single-bundle.d.ts +13 -16
  369. package/dist/routes/computer-use/single-bundle.js +46 -53
  370. package/dist/routes/computer-use/subject-projection.d.ts +6 -8
  371. package/dist/routes/computer-use/subject-projection.js +24 -23
  372. package/dist/routes/computer-use/types.d.ts +195 -238
  373. package/dist/routes/computer-use/types.js +21 -13
  374. package/dist/routes/preview.d.ts +8 -2
  375. package/dist/routes/preview.js +8 -5
  376. package/dist/routes/scripted/bundle.d.ts +5 -8
  377. package/dist/routes/scripted/bundle.js +23 -27
  378. package/dist/routes/scripted/plan.d.ts +6 -8
  379. package/dist/routes/scripted/plan.js +15 -13
  380. package/dist/routes/scripted/result.d.ts +4 -1
  381. package/dist/routes/scripted/result.js +15 -11
  382. package/dist/routes/scripted/route.js +15 -17
  383. package/dist/routes/scripted/scenario.d.ts +1 -1
  384. package/dist/routes/scripted/scenario.js +3 -3
  385. package/dist/routes/scripted/setup.d.ts +3 -2
  386. package/dist/routes/scripted/setup.js +27 -26
  387. package/dist/routes/scripted/subject.d.ts +8 -3
  388. package/dist/routes/scripted/subject.js +10 -6
  389. package/dist/routes/scripted/surface-records.js +4 -4
  390. package/dist/routes/scripted/surface-sessions.d.ts +2 -2
  391. package/dist/routes/scripted/surface-sessions.js +4 -4
  392. package/dist/routes/scripted/types.d.ts +21 -40
  393. package/dist/routes/scripted/types.js +2 -3
  394. package/dist/routes/shared-world/{seat-records.js → bundle-records.js} +17 -16
  395. package/dist/routes/shared-world/bundle.d.ts +7 -7
  396. package/dist/routes/shared-world/bundle.js +60 -62
  397. package/dist/routes/shared-world/checkpoints.d.ts +5 -5
  398. package/dist/routes/shared-world/checkpoints.js +5 -5
  399. package/dist/routes/shared-world/comms.d.ts +8 -7
  400. package/dist/routes/shared-world/comms.js +38 -51
  401. package/dist/routes/shared-world/external-public.d.ts +6 -5
  402. package/dist/routes/shared-world/external-public.js +28 -25
  403. package/dist/routes/shared-world/handoff.d.ts +10 -9
  404. package/dist/routes/shared-world/handoff.js +89 -81
  405. package/dist/routes/shared-world/lobby-code.d.ts +7 -7
  406. package/dist/routes/shared-world/lobby-code.js +22 -22
  407. package/dist/routes/shared-world/{seats.d.ts → participant-specs.d.ts} +15 -12
  408. package/dist/routes/shared-world/{seats.js → participant-specs.js} +65 -63
  409. package/dist/routes/shared-world/plan.d.ts +2 -6
  410. package/dist/routes/shared-world/plan.js +8 -9
  411. package/dist/routes/shared-world/provenance.d.ts +4 -4
  412. package/dist/routes/shared-world/provenance.js +4 -4
  413. package/dist/routes/shared-world/provisioned.d.ts +3 -2
  414. package/dist/routes/shared-world/provisioned.js +55 -48
  415. package/dist/routes/shared-world/result.js +47 -36
  416. package/dist/routes/shared-world/route.js +54 -57
  417. package/dist/routes/shared-world/setup.d.ts +6 -5
  418. package/dist/routes/shared-world/setup.js +16 -18
  419. package/dist/routes/shared-world/types.d.ts +70 -141
  420. package/dist/routes/shared-world/types.js +5 -5
  421. package/dist/routes/terminal/adapter.d.ts +10 -10
  422. package/dist/routes/terminal/adapter.js +32 -129
  423. package/dist/routes/terminal/bundle.d.ts +10 -15
  424. package/dist/routes/terminal/bundle.js +43 -52
  425. package/dist/routes/terminal/credentials.d.ts +4 -4
  426. package/dist/routes/terminal/credentials.js +20 -20
  427. package/dist/routes/terminal/dry-run.d.ts +1 -1
  428. package/dist/routes/terminal/dry-run.js +13 -15
  429. package/dist/routes/terminal/encoding.d.ts +1 -1
  430. package/dist/routes/terminal/encoding.js +4 -4
  431. package/dist/routes/terminal/ledger.d.ts +8 -8
  432. package/dist/routes/terminal/ledger.js +22 -22
  433. package/dist/routes/terminal/live-finish.d.ts +1 -2
  434. package/dist/routes/terminal/live-finish.js +24 -23
  435. package/dist/routes/terminal/live-sandbox.d.ts +3 -2
  436. package/dist/routes/terminal/live-sandbox.js +31 -32
  437. package/dist/routes/terminal/participant-text.d.ts +23 -0
  438. package/dist/routes/terminal/participant-text.js +165 -0
  439. package/dist/routes/terminal/persona.js +1 -1
  440. package/dist/routes/terminal/plan.d.ts +2 -6
  441. package/dist/routes/terminal/plan.js +23 -19
  442. package/dist/routes/terminal/recorder.d.ts +6 -1
  443. package/dist/routes/terminal/recorder.js +12 -4
  444. package/dist/routes/terminal/result.js +12 -12
  445. package/dist/routes/terminal/route.js +30 -31
  446. package/dist/routes/terminal/runtime.d.ts +3 -2
  447. package/dist/routes/terminal/runtime.js +3 -3
  448. package/dist/routes/terminal/sandbox.d.ts +4 -4
  449. package/dist/routes/terminal/sandbox.js +10 -10
  450. package/dist/routes/terminal/session.js +22 -19
  451. package/dist/routes/terminal/token-usage.d.ts +1 -1
  452. package/dist/routes/terminal/token-usage.js +10 -11
  453. package/dist/routes/terminal/trace.d.ts +7 -10
  454. package/dist/routes/terminal/trace.js +11 -66
  455. package/dist/routes/terminal/types.d.ts +104 -114
  456. package/dist/routes/terminal/types.js +12 -7
  457. package/dist/run/active-runs.d.ts +13 -0
  458. package/dist/run/active-runs.js +12 -0
  459. package/dist/run/bundle-shape.d.ts +2 -1
  460. package/dist/run/bundle-shape.js +7 -7
  461. package/dist/run/bundle.d.ts +99 -92
  462. package/dist/run/bundle.js +10 -8
  463. package/dist/run/cost-summary.js +6 -5
  464. package/dist/run/costs.d.ts +6 -6
  465. package/dist/run/costs.js +17 -11
  466. package/dist/run/detail.d.ts +9 -9
  467. package/dist/run/detail.js +10 -10
  468. package/dist/run/dry-run-inputs.js +1 -1
  469. package/dist/run/dry-run.js +23 -30
  470. package/dist/run/{study-files.d.ts → evidence-files.d.ts} +4 -4
  471. package/dist/run/{study-files.js → evidence-files.js} +5 -5
  472. package/dist/run/feedback-shape.js +1 -1
  473. package/dist/run/judge.d.ts +34 -16
  474. package/dist/run/judge.js +41 -14
  475. package/dist/run/locate.d.ts +2 -0
  476. package/dist/run/locate.js +3 -1
  477. package/dist/run/outcomes.d.ts +3 -3
  478. package/dist/run/outcomes.js +3 -3
  479. package/dist/run/participant-records.d.ts +2 -2
  480. package/dist/run/participant-records.js +2 -2
  481. package/dist/run/paths.d.ts +1 -1
  482. package/dist/run/paths.js +2 -2
  483. package/dist/run/pricing.d.ts +30 -15
  484. package/dist/run/pricing.js +49 -30
  485. package/dist/run/projection.d.ts +27 -27
  486. package/dist/run/projection.js +23 -23
  487. package/dist/run/reclaim.d.ts +6 -0
  488. package/dist/run/reclaim.js +15 -5
  489. package/dist/run/results.d.ts +5 -5
  490. package/dist/run/run-index.d.ts +9 -7
  491. package/dist/run/run-index.js +24 -25
  492. package/dist/run/run-not-found.d.ts +5 -0
  493. package/dist/run/run-not-found.js +15 -0
  494. package/dist/run/run.d.ts +7 -4
  495. package/dist/run/run.js +10 -6
  496. package/dist/run/sandbox-receipts.d.ts +5 -5
  497. package/dist/run/sandbox-receipts.js +6 -6
  498. package/dist/run/shared-world-evidence.d.ts +67 -66
  499. package/dist/run/shared-world-evidence.js +4 -4
  500. package/dist/run/shared-world-shape.d.ts +3 -3
  501. package/dist/run/shared-world-shape.js +16 -16
  502. package/dist/run/stats.d.ts +17 -11
  503. package/dist/run/stats.js +124 -66
  504. package/dist/run/status.d.ts +21 -32
  505. package/dist/run/status.js +34 -33
  506. package/dist/run/stored-runs.js +2 -1
  507. package/dist/run/stream-shape.js +1 -1
  508. package/dist/run/streams.d.ts +29 -22
  509. package/dist/run/study-provenance.d.ts +47 -0
  510. package/dist/run/study-provenance.js +63 -0
  511. package/dist/run/study-result.d.ts +16 -0
  512. package/dist/run/study-result.js +9 -0
  513. package/dist/run/terminal-contract.d.ts +5 -5
  514. package/dist/run/terminal-contract.js +4 -4
  515. package/dist/run/text.d.ts +2 -0
  516. package/dist/run/text.js +4 -0
  517. package/dist/run/transient-comms-secrets.d.ts +5 -0
  518. package/dist/run/transient-comms-secrets.js +12 -0
  519. package/dist/run-lab.d.ts +40 -38
  520. package/dist/run-lab.js +42 -40
  521. package/dist/study/convert.d.ts +33 -0
  522. package/dist/study/convert.js +432 -0
  523. package/dist/study/field-paths.d.ts +12 -0
  524. package/dist/study/field-paths.js +126 -0
  525. package/dist/study/files.d.ts +26 -0
  526. package/dist/study/files.js +43 -0
  527. package/dist/study/migrate.d.ts +48 -0
  528. package/dist/study/migrate.js +408 -0
  529. package/dist/study/owned-files.d.ts +38 -0
  530. package/dist/study/owned-files.js +182 -0
  531. package/dist/subject/clone.d.ts +1 -1
  532. package/dist/subject/desktop-cli.d.ts +2 -2
  533. package/dist/subject/desktop-cli.js +3 -3
  534. package/dist/subject/local-tree-archive.d.ts +1 -1
  535. package/dist/subject/local-tree-archive.js +5 -5
  536. package/dist/subject/local-tree.d.ts +3 -3
  537. package/dist/subject/local-tree.js +1 -1
  538. package/dist/subject/node-bootstrap.d.ts +1 -1
  539. package/dist/subject/node-bootstrap.js +4 -4
  540. package/dist/subject/runtime.js +10 -11
  541. package/dist/subject/serve.d.ts +1 -1
  542. package/dist/subject/serve.js +4 -4
  543. package/dist/subject/state.d.ts +1 -1
  544. package/dist/subject/steps.d.ts +8 -8
  545. package/dist/subject/steps.js +7 -7
  546. package/dist/substrates/command-failure.d.ts +3 -3
  547. package/dist/substrates/command-failure.js +3 -3
  548. package/dist/substrates/detached.d.ts +6 -6
  549. package/dist/substrates/detached.js +7 -7
  550. package/dist/substrates/e2b/cdp-probe.d.ts +11 -11
  551. package/dist/substrates/e2b/cdp-probe.js +15 -18
  552. package/dist/substrates/e2b/desktop-browser.d.ts +5 -5
  553. package/dist/substrates/e2b/desktop-browser.js +12 -12
  554. package/dist/substrates/e2b/desktop-cdp.d.ts +15 -15
  555. package/dist/substrates/e2b/desktop-cdp.js +11 -11
  556. package/dist/substrates/e2b/desktop-executor.d.ts +1 -1
  557. package/dist/substrates/e2b/desktop-executor.js +1 -1
  558. package/dist/substrates/e2b/desktop-geometry.d.ts +6 -6
  559. package/dist/substrates/e2b/desktop-geometry.js +9 -9
  560. package/dist/substrates/e2b/desktop-media.d.ts +1 -1
  561. package/dist/substrates/e2b/desktop-media.js +3 -3
  562. package/dist/substrates/e2b/desktop-screenshot-cleanup.d.ts +3 -3
  563. package/dist/substrates/e2b/desktop-screenshot-cleanup.js +3 -3
  564. package/dist/substrates/e2b/sandbox.d.ts +1 -1
  565. package/dist/substrates/e2b/sandbox.js +2 -2
  566. package/dist/substrates/e2b/sdk.d.ts +11 -11
  567. package/dist/substrates/e2b/sdk.js +8 -8
  568. package/dist/substrates/local/runtime-host.d.ts +2 -0
  569. package/dist/substrates/local/runtime-host.js +6 -0
  570. package/dist/tui/actions.d.ts +8 -6
  571. package/dist/tui/actions.js +31 -22
  572. package/dist/tui/contract.d.ts +16 -16
  573. package/dist/tui/contract.js +10 -10
  574. package/dist/tui/launch.d.ts +4 -4
  575. package/dist/tui/launch.js +18 -19
  576. package/dist/tui/project.js +5 -5
  577. package/dist/tui-app.js +83 -83
  578. package/dist/verify/actor.d.ts +14 -14
  579. package/dist/verify/actor.js +45 -45
  580. package/dist/verify/artifacts.d.ts +3 -3
  581. package/dist/verify/artifacts.js +6 -6
  582. package/dist/verify/context-growth.d.ts +9 -0
  583. package/dist/verify/context-growth.js +62 -0
  584. package/dist/verify/costs.d.ts +7 -7
  585. package/dist/verify/costs.js +9 -9
  586. package/dist/verify/liveness.d.ts +1 -1
  587. package/dist/verify/liveness.js +4 -1
  588. package/dist/verify/rerun.d.ts +1 -1
  589. package/dist/verify/rerun.js +1 -1
  590. package/dist/verify/shared-world-concurrent.d.ts +2 -2
  591. package/dist/verify/shared-world-concurrent.js +79 -76
  592. package/dist/verify/shared-world.d.ts +2 -2
  593. package/dist/verify/shared-world.js +18 -18
  594. package/dist/verify/subject.d.ts +4 -4
  595. package/dist/verify/subject.js +18 -18
  596. package/dist/verify/verify.js +98 -49
  597. package/docs/README.md +26 -33
  598. package/docs/architecture/actor-contract.md +105 -98
  599. package/docs/architecture/desktop-sessions.md +14 -14
  600. package/docs/architecture/external-public-shared-world.md +66 -59
  601. package/docs/architecture/github-feedback-loop.md +1 -4
  602. package/docs/architecture/guest-desktop.md +2 -2
  603. package/docs/architecture/observer.md +37 -37
  604. package/docs/architecture/restricted-codex-analysis.md +70 -30
  605. package/docs/architecture/serve.md +34 -37
  606. package/docs/architecture/state-driven-executor.md +55 -59
  607. package/docs/architecture/task-protocol-support.md +7 -9
  608. package/docs/architecture/{terminal-product-lane.md → terminal-product-route.md} +83 -115
  609. package/docs/contracts/README.md +24 -0
  610. package/docs/contracts/adapter-admission.md +3 -3
  611. package/docs/contracts/adapter-fixtures.md +2 -5
  612. package/docs/contracts/core.md +1 -3
  613. package/docs/contracts/errors.md +62 -0
  614. package/docs/contracts/feedback.md +8 -9
  615. package/docs/contracts/policy.md +7 -12
  616. package/docs/contracts/run-bundle.md +54 -51
  617. package/docs/contracts/schemas.md +505 -390
  618. package/docs/contracts/study-analysis.md +26 -2
  619. package/docs/contracts/study-costs.md +11 -7
  620. package/docs/decisions/0001-run-bundle-is-the-source-of-truth.md +1 -1
  621. package/docs/decisions/0002-observer-is-one-self-contained-file.md +2 -2
  622. package/docs/decisions/0003-contained-paths-and-cleanup-authority.md +3 -3
  623. package/docs/decisions/0004-participant-desktops-stay-in-the-route.md +2 -1
  624. package/docs/principles/actor-fidelity.md +4 -4
  625. package/docs/principles/engineering.md +3 -3
  626. package/docs/principles/invariants-and-defaults.md +38 -38
  627. package/docs/principles/self-driving-harness.md +1 -5
  628. package/docs/principles/three-roles.md +1 -1
  629. package/docs/product/automatic-analysis.md +8 -7
  630. package/examples/participant/README.md +5 -5
  631. package/examples/participant/run.mjs +11 -10
  632. package/examples/scorer/README.md +3 -3
  633. package/examples/scorer/run.mjs +11 -12
  634. package/package.json +16 -17
  635. package/skills/humanish/SKILL.md +63 -60
  636. package/skills/humanish/agents/openai.yaml +1 -1
  637. package/AGENTS.md +0 -99
  638. package/CONTRIBUTING.md +0 -148
  639. package/dist/actors/codex/qualified-versions.d.ts +0 -45
  640. package/dist/actors/codex/qualified-versions.js +0 -87
  641. package/dist/cli/commands/lab.d.ts +0 -3
  642. package/dist/cli/commands/lab.js +0 -193
  643. package/dist/deprecated.d.ts +0 -90
  644. package/dist/deprecated.js +0 -106
  645. package/dist/lab/bag-overrides.d.ts +0 -18
  646. package/dist/lab/bag-overrides.js +0 -121
  647. package/dist/observer/static.d.ts +0 -39
  648. package/dist/observer/static.js +0 -369
  649. package/dist/routes/computer-use/legacy-lane-spec.d.ts +0 -62
  650. package/dist/routes/computer-use/legacy-lane-spec.js +0 -39
  651. package/docs/architecture/comms-inbox.md +0 -122
  652. package/docs/architecture/desktop-recording.md +0 -80
  653. package/docs/architecture/local-browser-runtime.md +0 -178
  654. package/docs/architecture/observer-review.md +0 -144
  655. package/docs/architecture/participant-media.md +0 -90
  656. package/docs/architecture/project-layout.md +0 -62
  657. package/docs/architecture/real-email-receiving.md +0 -136
  658. package/docs/assets/humanish-drawdb-hero.png +0 -0
  659. package/docs/assets/humanish-observer-hero.png +0 -0
  660. package/docs/goals/current.md +0 -207
  661. package/docs/product/lobby-trivia-3player-external-public.md +0 -77
  662. package/docs/product/open-source-install-experience.md +0 -240
  663. package/docs/ramp/README.md +0 -294
  664. package/docs/release/open-source-readiness.md +0 -222
  665. package/docs/release/public-readiness-standard.md +0 -210
  666. package/docs/roadmap/world-class-open-source-v0.md +0 -311
  667. /package/dist/routes/computer-use/{fanout-lanes.d.ts → fanout-records.d.ts} +0 -0
  668. /package/dist/routes/shared-world/{seat-records.d.ts → bundle-records.d.ts} +0 -0
package/README.md CHANGED
@@ -1,60 +1,32 @@
1
1
  # humanish
2
2
 
3
3
  Synthetic user research for apps, CLIs, and agent-facing product flows.
4
- Open-source and public-safe.
5
-
6
- humanish runs studies. Realistic synthetic participants, each with its own
7
- goals, patience, and skill, actually use your product on isolated desktops while
8
- you watch. A study leaves verifiable evidence: screenshots, action traces,
9
- per-task completion funnels, participant outcomes with the denominator
10
- attached, and estimated cost lines. A fail-closed share-safety gate decides what
11
- goes into feedback drafts, export bundles and a `serve --safe` library, and the
12
- end of the pipeline is a public-safe feedback draft you can turn into a real
13
- issue. Committed lab source lives under `humanish/`; run evidence lands under
14
- gitignored `.humanish/`.
15
4
 
16
5
  [![The Observer grid of a saved eight-participant study: eight desktops in one multiplayer lobby, each tile a participant's live screen](https://humanish.dev/runs/lobby-0927/poster.jpg)](https://humanish.dev/demo)
17
6
 
18
- **[Watch a saved run](https://humanish.dev/demo).** Eight synthetic participants
19
- joined one lobby of a multiplayer game on its live deployment, each on its own
20
- hosted desktop, and played five rounds. Six reached the final standings, two were
21
- blocked, and `humanish analyze` turned the 13-minute recording into seven
22
- findings, each linked to the capture behind it. The page replays the real
23
- Observer; nothing runs from it.
7
+ **[Watch a saved run](https://humanish.dev/demo).** Eight synthetic participants joined one
8
+ lobby of a multiplayer game on its live deployment, each on its own hosted desktop. The page
9
+ replays the real Observer; nothing runs from it.
24
10
 
25
- **Numbers so far, every one with its run ids.** Recall on five planted defects
26
- in a small task app: 15 of 15 across three live runs
27
- ([benchmark](https://github.com/danielgwilson/humanish/blob/main/bench/RESULTS-2026-09-04-0.76.0.md)). Precision on apps the
28
- maintainer did not write: TodoMVC 5 of 6 findings confirmed against the source,
29
- drawDB 11 of 12, none invented
30
- ([TodoMVC](https://github.com/danielgwilson/humanish/blob/main/bench/RESULTS-TODOMVC-2026-09-01.md), [drawDB](https://github.com/danielgwilson/humanish/blob/main/bench/RESULTS-DRAWDB-2026-09-01.md)).
31
- Cold install to a live study: 9 of 9 fresh directories reached the goal in 108 to 200 seconds;
32
- the five on the API route cost $0.16 to $0.35 each, and the four on Codex or Claude Code are
33
- unpriced ([receipt](https://github.com/danielgwilson/humanish/blob/main/docs/goals/computer-use-actor/receipts/cold-install-try-live-2026-09-01.md)).
34
- Same mission, different personas: keyboard-first participants reported drawDB's
35
- database modal 5 of 5 times and TodoMVC's mouse-only rename 6 of 6; mouse newcomers
36
- reported them 0 of 5 and 0 of 6 ([receipt](https://github.com/danielgwilson/humanish/blob/main/docs/goals/computer-use-actor/receipts/persona-axis-phone-2026-09-03.md)).
37
- Planted defects are more legible than real ones and the largest cell is six runs;
38
- read these as what the machinery found, not as rates for your users.
39
-
40
- ![humanish Observer grid of a live four-persona drawDB study: four completed participants, each showing its final full-desktop screenshot and outcome](https://unpkg.com/humanish@0.16.0/docs/assets/humanish-drawdb-hero.png)
41
-
42
- An earlier study, kept here because the image ships in the npm package: four
43
- personas on [drawDB](https://github.com/drawdb-io/drawdb), a public open-source
44
- database diagram editor, driven against a commit-pinned local checkout. Every participant
45
- ran a real computer-use session on a hosted desktop; the captions are each persona's
46
- own final report. drawDB is the application studied; it is not a humanish adopter or endorser.
47
-
48
- [Quickstart](https://humanish.dev/docs) · [Study your app](https://humanish.dev/docs/your-app) · [What a study costs](https://humanish.dev/docs/what-a-study-costs) · [Trust boundaries](https://humanish.dev/docs/trust-boundaries) · [CLI reference](https://humanish.dev/docs/cli) · [Limits and evidence](https://humanish.dev/failure-modes)
11
+ ## Try it without keys
49
12
 
50
- ## Install
51
-
52
- Use **Node.js 22.19 or newer**, in a project directory:
13
+ In a project directory, with Node.js 22.19 or newer:
53
14
 
54
15
  ```bash
55
16
  npm install --save-dev humanish
17
+ npx humanish init --yes
18
+ npx humanish run first-run
19
+ npx humanish observe --run latest --open
56
20
  ```
57
21
 
22
+ This writes a preview study with no model calls and no spend, so you can read the evidence format
23
+ before you add keys. To run participants against your own app, follow the
24
+ [own-app guide](https://humanish.dev/docs/your-app).
25
+
26
+ [Quickstart](https://humanish.dev/docs) · [Study your app](https://humanish.dev/docs/your-app) · [What a study costs](https://humanish.dev/docs/what-a-study-costs) · [Trust boundaries](https://humanish.dev/docs/trust-boundaries) · [CLI reference](https://humanish.dev/docs/cli) · [Limits and evidence](https://humanish.dev/failure-modes)
27
+
28
+ ## Run a live study
29
+
58
30
  `@e2b/desktop` is the optional peer for live hosted desktops. Install it alongside
59
31
  humanish when choosing that route (`npm install --save-dev @e2b/desktop`) so the
60
32
  CLI can resolve it; a one-shot `npx humanish@latest` can miss the peer. The keyless
@@ -62,44 +34,46 @@ preview and local-browser setup need only `humanish`.
62
34
 
63
35
  Choose how the participant runs:
64
36
 
65
- | Setup | Participant authentication | Desktop | Automatic findings |
66
- | ----------------------------------------------------------------- | ------------------------------------- | ---------------------------------------------------- | ------------------------------------------------ |
67
- | `first-run` preview | None; synthetic evidence only | None | No model analysis |
68
- | [Local browser study](docs/architecture/local-browser-runtime.md) | Codex ChatGPT login; remote inference | Linux x64 + Docker/KVM or M3+ Mac + Lima; no E2B key | Separate Codex account analyst by default |
69
- | `openai-computer-use` | `OPENAI_API_KEY` | `E2B_API_KEY` + desktop SDK | Separate OpenAI request |
70
- | [`local-agent`](https://humanish.dev/docs/local-agents) | Codex or Claude Code's own login | `E2B_API_KEY` + desktop SDK | Still needs `OPENAI_API_KEY`; skipped without it |
37
+ | Setup | Participant authentication | Desktop | Automatic findings |
38
+ | -------------------------------------------------------------- | ------------------------------------- | ---------------------------------------------------- | ------------------------------------------------ |
39
+ | `first-run` preview | None; synthetic evidence only | None | No model analysis |
40
+ | [Local browser study](https://humanish.dev/docs/local-browser) | Codex ChatGPT login; remote inference | Linux x64 + Docker/KVM or M3+ Mac + Lima; no E2B key | Separate Codex account analyst by default |
41
+ | `openai-computer-use` | `OPENAI_API_KEY` | `E2B_API_KEY` + desktop SDK | Separate OpenAI request |
42
+ | [`local-agent`](https://humanish.dev/docs/local-agents) | Codex or Claude Code's own login | `E2B_API_KEY` + desktop SDK | Still needs `OPENAI_API_KEY`; skipped without it |
71
43
 
72
44
  A Codex ChatGPT login can power a `local-agent` participant. It does not
73
45
  authenticate humanish's OpenAI API requests. Choose the actor explicitly in
74
- your lab; installing Codex does not change an `openai-computer-use` lab.
46
+ your study; installing Codex does not change an `openai-computer-use` study.
47
+
48
+ ### Study your app in a local browser
75
49
 
76
50
  For local browsers, install only `humanish` and follow the
77
- [local study setup](docs/architecture/local-browser-runtime.md). The first live
51
+ [local study setup](https://humanish.dev/docs/local-browser). The first live
78
52
  run downloads a verified runtime image; `npx humanish runtime setup` prepares it
79
53
  ahead of time. Supported Macs use Lima instead of Docker Desktop.
80
- [Optional camera and spoken conversation](docs/architecture/participant-media.md)
81
- use a separate media runtime. [Optional desktop video/audio](docs/architecture/desktop-recording.md)
82
- adds continuous Observer playback; screenshots remain the default. [Local captured inboxes](docs/architecture/comms-inbox.md#local-browser-studies) support email verification without mailbox-provider credentials.
54
+ [Optional camera and spoken conversation](https://humanish.dev/docs/participant-media)
55
+ use a separate media runtime. [Optional desktop video/audio](https://humanish.dev/docs/desktop-recording)
56
+ adds continuous Observer playback; screenshots remain the default. [Local captured inboxes](https://humanish.dev/docs/comms-inbox#local-browser-studies) support email verification without mailbox-provider credentials.
83
57
 
84
- For a new local lab, initialize with your app URL and task:
58
+ For a new local study, initialize with your app URL and task:
85
59
 
86
60
  ```bash
87
61
  npx humanish init --yes \
88
62
  --local-browser http://127.0.0.1:3000 \
89
63
  --local-mission "Complete the primary flow and explain anything confusing"
90
- npx humanish doctor --lab local-browser
64
+ npx humanish doctor --study local-browser
91
65
  npx humanish run local-browser
92
66
  npx humanish verify
93
67
  ```
94
68
 
95
69
  Start your app before running the study. `verify` checks the saved run bundle, and its
96
70
  share-safety line says whether the evidence can be shared as-is. If you already initialized this
97
- project, edit `humanish/labs/local-browser.yaml` to change its URL or mission; `init`
71
+ project, edit `humanish/studies/local-browser.yaml` to change its URL or mission; `init`
98
72
  preserves existing files and warns when supplied settings cannot be applied.
99
73
 
100
74
  `init` also adds `humanish:*` scripts to `package.json`. `npm run humanish:doctor` and
101
75
  `npm run humanish:verify` run those commands, and `humanish:watch` runs a study and keeps the
102
- Observer attached. `humanish:run` is `humanish run --dry-run`: a contract-proof dry run with no
76
+ Observer attached. `humanish:run` is `humanish run --dry-run`: a dry run with no
103
77
  browser or model, not the live study above.
104
78
 
105
79
  `doctor` only inspects setup. It does not install or start the runtime, open a
@@ -107,63 +81,75 @@ browser, or use Codex account quota. The local study needs a supported Codex CLI
107
81
  version and ChatGPT login. Linux x64 also needs local rootful Docker, KVM and
108
82
  TUN; M3-or-newer Apple Silicon Macs need native ARM64 Node and Lima 2.2+.
109
83
 
110
- **Run a live study with the API route.** Set the desktop and model keys with hidden prompts, then
111
- send one synthetic participant into the included drawDB study:
84
+ ### Study drawDB through the API route
85
+
86
+ Set the desktop and model keys with hidden prompts, then send one synthetic participant into the
87
+ included drawDB study:
112
88
 
113
89
  ```bash
114
90
  npx humanish keys set e2b
115
91
  npx humanish keys set openai
116
92
  npx humanish init --yes
117
- npx humanish doctor --lab try-live
118
- npx humanish lab preflight try-live
93
+ npx humanish doctor --study try-live
94
+ npx humanish study check try-live
119
95
  npx humanish run try-live
120
96
  npx humanish observe --run latest --open
121
97
  ```
122
98
 
123
99
  Existing `E2B_API_KEY` and `OPENAI_API_KEY` environment variables also work.
124
- `doctor --lab` checks the selected route's local setup without launching a
100
+ `doctor --study` checks the selected route's local setup without launching a
125
101
  desktop or making a model request. It reports key presence, not remote key
126
- validity, model access, or quota. `lab preflight` checks manifest metadata by default.
102
+ validity, model access, or quota. `study check` checks manifest metadata by default.
127
103
  `try-live` clones and studies drawDB, not your project. Set the keys before `init`:
128
104
  `init` writes `try-live` for the participant this machine can run, and it never
129
- overwrites an existing lab file. With an OpenAI key, from the environment or the
105
+ overwrites an existing study file. With an OpenAI key, from the environment or the
130
106
  `keys set` store, the participant is `openai-computer-use` and its **$2 cap covers
131
107
  estimated participant model spend**. With no OpenAI key and a signed-in Codex or
132
108
  Claude Code, it is `local-agent`, bounded by a ten-minute session limit with no
133
- dollar cap. Post-run analysis defaults to a separate
134
- **$3 admission estimate limit**; set `review.analysis: false` to disable it.
109
+ dollar cap. Automatic analysis after the run is a separate request;
110
+ [Read the results](#read-the-results) gives its limit and how to turn it off.
135
111
  Hosted desktop time is additional. Participant caps are checked
136
112
  between turns and are not provider billing ceilings. Allow a few minutes for
137
113
  the app to build and the participant to work. See [budgets and privacy](https://humanish.dev/docs/budgets-and-privacy).
138
114
 
139
- **Preview without keys.** To see the evidence format before connecting providers:
140
-
141
- ```bash
142
- npx humanish init --yes
143
- npx humanish run first-run
144
- npx humanish observe --run latest --open
145
- ```
146
-
147
- This generates an evidence preview with no provider spend. It does not open
148
- your app, run an actor, or validate product behavior. To study your own product,
149
- follow the complete [own-app lab](https://humanish.dev/docs/your-app).
115
+ ## See what studies have found
150
116
 
151
- For coding agents, install the companion skill:
152
-
153
- ```bash
154
- npx skills add danielgwilson/humanish --skill humanish
155
- ```
117
+ humanish runs studies. Realistic synthetic participants, each with its own
118
+ goals, patience, and skill, actually use your product on isolated desktops while
119
+ you watch. A study leaves verifiable evidence: screenshots, action traces,
120
+ per-task completion funnels, participant outcomes with the denominator
121
+ attached, and estimated cost lines. A fail-closed share-safety gate decides what
122
+ goes into feedback drafts, export bundles and an `observe --all --safe` library, and the
123
+ end of the pipeline is a public-safe feedback draft you can turn into a real
124
+ issue. Committed study source lives under `humanish/`; run evidence lands under
125
+ gitignored `.humanish/`. [ARCHITECTURE.md](ARCHITECTURE.md) traces `humanish run <study>` through
126
+ the code.
156
127
 
157
- Source: [`skills/humanish/SKILL.md`](skills/humanish/SKILL.md).
128
+ The researcher declares the study, the participant tries the product, and the
129
+ stakeholder reads what happened. [Three roles](docs/principles/three-roles.md)
130
+ explains the design; the [email-gated signup study records](https://github.com/danielgwilson/humanish/tree/main/docs/evidence/email-signup/)
131
+ show a completed two-participant study and a reported keyboard-accessibility finding.
158
132
 
159
- ## How It Works
133
+ In the [saved run](https://humanish.dev/demo), eight participants played five rounds. Six
134
+ reached the final standings, two were blocked, and `humanish analyze` turned the 13-minute
135
+ recording into seven findings, each linked to the capture behind it.
160
136
 
161
- ```text
162
- humanish/ committed labs, personas, scenarios, coverage notes
163
- .humanish/ ignored run evidence, Observer output, reviews, local state
164
- ```
137
+ **Numbers so far, every one with its run ids.** Recall on five planted defects
138
+ in a small task app: 15 of 15 across three live runs
139
+ ([benchmark](https://github.com/danielgwilson/humanish/blob/main/bench/RESULTS-2026-09-04-0.76.0.md)). Precision on apps the
140
+ maintainer did not write: TodoMVC 5 of 6 findings confirmed against the source,
141
+ drawDB 11 of 12, none invented
142
+ ([TodoMVC](https://github.com/danielgwilson/humanish/blob/main/bench/RESULTS-TODOMVC-2026-09-01.md), [drawDB](https://github.com/danielgwilson/humanish/blob/main/bench/RESULTS-DRAWDB-2026-09-01.md)).
143
+ Cold install to a live study: 9 of 9 fresh directories reached the goal in 108 to 200 seconds;
144
+ the five on the API route cost $0.16 to $0.35 each, and the four on Codex or Claude Code are
145
+ unpriced ([study record](https://github.com/danielgwilson/humanish/blob/main/docs/evidence/computer-use/cold-install-try-live-2026-09-01.md)).
146
+ Same mission, different personas: keyboard-first participants reported drawDB's
147
+ database modal 5 of 5 times and TodoMVC's mouse-only rename 6 of 6; mouse newcomers
148
+ reported them 0 of 5 and 0 of 6 ([study record](https://github.com/danielgwilson/humanish/blob/main/docs/evidence/computer-use/persona-axis-phone-2026-09-03.md)).
149
+ Planted defects are more legible than real ones and the largest cell is six runs;
150
+ read these as what the machinery found, not as rates for your users.
165
151
 
166
- [ARCHITECTURE.md](ARCHITECTURE.md) traces `humanish run <lab>` through the code.
152
+ ## Read the results
167
153
 
168
154
  After a run, read its findings and verification grade:
169
155
 
@@ -202,7 +188,7 @@ review:
202
188
  analysis: false
203
189
  ```
204
190
 
205
- `humanish run <lab>`, `humanish lab run <lab>`, `humanish watch <lab>`, and live
191
+ `humanish run <study>`, `humanish watch <study>`, and live
206
192
  starts in the TUI share this default. Dry runs and unsupported routes dispatch
207
193
  nothing. Without `OPENAI_API_KEY`, default analysis is skipped and a successful
208
194
  recording stays successful. A default analysis whose admission estimate is over
@@ -211,10 +197,9 @@ command that runs it. Opening the TUI or Observer never starts a request.
211
197
  See [automatic analysis](docs/product/automatic-analysis.md) for configuration,
212
198
  cancellation, and failure behavior.
213
199
 
214
- ## Public-Safety Boundary
200
+ ## Share evidence safely
215
201
 
216
- humanish is designed for public repositories and public issue queues. The
217
- boundary is three planks, each enforced where it actually holds:
202
+ humanish is designed for public repositories and public issue queues.
218
203
 
219
204
  **1. This repo and the published package are kept public-safe by CI.** Every
220
205
  push runs a public-surface scan (secret/key/path shapes, a sha256 binary-asset
@@ -235,11 +220,11 @@ bundle, and review the actual text and pixels before sharing.
235
220
  evidence over the network when you pass `--expose`, and humanish has no auth of
236
221
  its own behind either one:
237
222
 
238
- - `humanish watch <lab> --expose` streams a live run, which is never
223
+ - `humanish watch <study> --expose` streams a live run, which is never
239
224
  `share_ready`, to whoever your edge admits. It requires edge auth:
240
225
  `--tunnel ngrok --oauth google`, or `--public-url` for an edge you run. Without
241
226
  `--allow-email` or `--allow-domain`, the OAuth edge admits any Google account.
242
- - `humanish serve --expose` serves your run library. With edge auth and no
227
+ - `humanish observe --all --expose` serves your run library. With edge auth and no
243
228
  `--safe`, everyone the edge admits sees every run, raw screenshots included.
244
229
  With `--safe`, it serves only `share_ready` runs, and edge auth is optional.
245
230
 
@@ -258,8 +243,8 @@ does not yet detect free-form PII or PHI such as names, emails,
258
243
  phone numbers, dates of birth, or medical identifiers. Keeping those out depends
259
244
  on using synthetic data and on review, so `redaction: passed` means the
260
245
  automated secret and path scan found no matches, not that the artifact was
261
- certified free of PII or PHI. A first-class PII/PHI detector is on the roadmap
262
- ([#108](https://github.com/danielgwilson/humanish/issues/108)).
246
+ certified free of PII or PHI. A first-class PII/PHI detector is
247
+ [planned](https://github.com/danielgwilson/humanish/issues/108).
263
248
 
264
249
  `humanish verify --json` also reports `shareSafety.status`:
265
250
 
@@ -285,17 +270,19 @@ or runs a signed-in agent. The `*.live.test.ts` suites run only when a
285
270
  `HUMANISH_LIVE_*` variable and real keys are set. Live behavior is checked only
286
271
  by runs made outside CI.
287
272
 
288
- **Codex versions are pinned.** Codex participants (local browser studies and
289
- `local-agent` with Codex) and the Codex account analyst accept only the Codex
290
- CLI versions admitted for your host, listed in
291
- [`qualified-versions.ts`](https://github.com/danielgwilson/humanish/blob/main/src/actors/codex/qualified-versions.ts).
292
- On Linux x64 and Apple-silicon macOS those are the versions humanish has qualified. Linux arm64
293
- and Intel macOS keep the one version they ran before qualification began, which has not been
294
- qualified there. Any other version, including one Codex updated itself to, is refused with the
295
- list of accepted versions.
296
-
297
- **Credentials.** For each provider key a command needs, humanish uses the first
298
- of these sources that has it. It prints the name and source of each key it
273
+ **Codex versions.** Codex participants (local browser studies and
274
+ `local-agent` with Codex) and the Codex account analyst run any stable Codex CLI release from
275
+ 0.154.0 on, except releases humanish refuses, listed in
276
+ [`codex-admission.ts`](https://github.com/danielgwilson/humanish/blob/main/src/actors/codex/codex-admission.ts).
277
+ A new release runs the day it ships, including one Codex updated itself to. Each launch checks
278
+ the release's app-server schema against the fields humanish uses and refuses one that changed
279
+ them. Prereleases and releases below 0.154.0 are refused, and the refusal names the release and
280
+ why. A hosted participant on a release humanish has not tested records a warning.
281
+
282
+ **Mobile emulation.** Mobile viewport and touch flags do not certify gesture equivalence.
283
+
284
+ **Credentials.** humanish fills each provider key that is not already set from
285
+ the first of these sources that has it. It prints the name and source of a key it
299
286
  fills from sources 2 to 4, never the value:
300
287
 
301
288
  1. the process environment, including a file passed with `--env-file`;
@@ -305,8 +292,13 @@ fills from sources 2 to 4, never the value:
305
292
  4. `$XDG_CONFIG_HOME/humanish/keys.env` (by default `~/.config/humanish/keys.env`),
306
293
  which `humanish keys set` writes as plain text with mode `0600`.
307
294
 
308
- A dry run reads no provider key, so `run`, `lab run` and `watch` consult sources 2 to 4 only
309
- for a live lab. `lab preflight`, `doctor`, `tui` and the `comms` commands still consult them.
295
+ A dry run reads no provider key, so `run`, `run` and `watch` consult sources 2 to 4 only
296
+ for a live study. A live run fills every key it finds and prints the ones its plan reads: its model,
297
+ desktop and runtime keys, its `subject.env` names, the variable
298
+ `comms.email.external.authTokenEnv` names, `ANTHROPIC_API_KEY` for a Claude Code participant, and
299
+ `OPENAI_API_KEY` when its automatic analysis runs on OpenAI. With a declared scorer it prints
300
+ every key it fills, since the scorer's code may read any. `study check`, `doctor`, `tui` and the
301
+ `comms` commands still consult them.
310
302
  `humanish analyze` consults them for a live OpenAI analysis, and not for `--dry-run` or the
311
303
  Codex analyst.
312
304
  `HUMANISH_STRICT_KEYS=1` turns off sources 2 to 4. `init` and `doctor` also run
@@ -318,52 +310,62 @@ never reads the subject app's own `.env` files.
318
310
  **What leaves your machine.** [Trust boundaries](https://humanish.dev/docs/trust-boundaries)
319
311
  has the providers' retention terms.
320
312
 
321
- | Party | What it receives | When |
322
- | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
323
- | OpenAI | Each step's screenshot, the persona, the mission and the actions so far; after a run, selected text and captures for analysis; for an external-public shared-world lab, the host participant's screen while its lobby code is read; for a terminal study, the agent's requests from the E2B sandbox | `openai-computer-use` participants; automatic or `humanish analyze` runs; external-public shared-world labs; terminal studies |
324
- | Codex or Claude Code | The same screenshots and prompts, through your signed-in agent and its provider | `local-agent` participants, local browser studies, the Codex analyst |
325
- | E2B | A desktop or shell running your app and everything on its screen; the repository a `clone` subject names; your working tree for a `local-tree` subject, minus gitignored files, `.env*` and other secret-shaped files; the credentials you declare for the subject app; for a terminal study, your OpenAI key unless `execution.runtimeAuth: openai-egress` | Every hosted study |
326
- | PostHog | Telemetry events, described [below](#telemetry) | By default |
313
+ | Party | What it receives | When |
314
+ | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
315
+ | OpenAI | Each step's screenshot, the persona, the mission and the actions so far; after a run, selected text and captures for analysis; for an external-public shared-world study, the host participant's screen while its lobby code is read; for a terminal study, the agent's requests from the E2B sandbox | `openai-computer-use` participants; automatic or `humanish analyze` runs; external-public shared-world studies; terminal studies |
316
+ | Codex or Claude Code | The same screenshots and prompts, through your signed-in agent and its provider | `local-agent` participants, local browser studies, the Codex analyst |
317
+ | E2B | A desktop or shell running your app and everything on its screen; the repository a `clone` subject names; your working tree for a `local-tree` subject, minus gitignored files, `.env*` and other secret-shaped files; the credentials you declare for the subject app; for a terminal study, your OpenAI key unless `execution.runtimeAuth: openai-egress` | Every hosted study |
318
+ | PostHog | Telemetry events, described [below](#check-what-telemetry-sends) | By default |
327
319
 
328
- ## Commands
320
+ ## Find the main commands
329
321
 
330
322
  Use `npx humanish` from your project. Full arguments and options are generated
331
323
  from the shipped CLI in the [command reference](https://humanish.dev/docs/cli).
332
324
 
333
325
  | Command | Purpose |
334
326
  | -------------------------------------------------------- | ------------------------------------------------------------------------- |
335
- | `humanish init --yes` | Scaffold lab source and ignored runtime state. |
336
- | `humanish doctor --lab <lab> --json` | Check the selected route's setup without exposing key values or spending. |
337
- | `humanish lab list --json` | List available labs. |
338
- | `humanish lab inspect <lab> --json` | Read a lab before running it. |
339
- | `humanish lab preflight <lab> --json` | Check configuration and route warnings. |
340
- | `humanish run <lab>` | Run the named preview or live study. |
341
- | `humanish watch <lab>` | Run a lab with an attached Observer. |
327
+ | `humanish init --yes` | Scaffold study source and ignored runtime state. |
328
+ | `humanish doctor --study <study> --json` | Check the selected route's setup without exposing key values or spending. |
329
+ | `humanish study list --json` | List available studies. |
330
+ | `humanish study show <study> --json` | Read a study before running it. |
331
+ | `humanish study check <study> --json` | Check configuration and route warnings. |
332
+ | `humanish run <study>` | Run the named preview or live study. |
333
+ | `humanish watch <study>` | Run a study with an attached Observer. |
342
334
  | `humanish runs --json` | List local run history. |
343
335
  | `humanish review --run latest --json` | Read an existing run's evidence. |
344
336
  | `humanish verify --run latest --json` | Check evidence and share-safety gates. |
345
337
  | `humanish feedback issue --run latest --repo owner/repo` | Print an eligible feedback draft. |
346
338
 
347
- ## Exit Codes
339
+ ## Check exit codes
348
340
 
349
341
  | Code | Meaning |
350
342
  | ------- | ----------------------------------------------------------------------------------------- |
351
343
  | `0` | Success. |
352
- | `1` | Commander usage error: unknown command, unknown option, or a missing/invalid argument. |
344
+ | `1` | Usage error: unknown command, unknown option, or a missing/invalid argument. |
353
345
  | `2` | humanish domain or validation failure. Check the JSON envelope's `error.code` for detail. |
354
346
  | `128+N` | Terminated by signal `N`: `130` for SIGINT, `143` for SIGTERM, `129` for SIGHUP. |
355
347
 
356
- ## The Terminal Surface
348
+ ## Browse studies in the terminal
357
349
 
358
- `humanish tui` is for a person browsing labs and runs. It needs an
350
+ `humanish tui` is for a person browsing studies and runs. It needs an
359
351
  interactive stdin/stdout, and refuses detected coding-agent sessions even with
360
- a TTY. Agents should use `lab list --json`, `lab inspect <lab> --json`, and
352
+ a TTY. Agents should use `study list --json`, `study show <study> --json`, and
361
353
  `runs --json`. Read [TUI behavior and JSON alternatives](https://humanish.dev/docs/review-surfaces#for-coding-agents-and-scripts).
362
354
 
363
355
  Its Connections screen (**c**) adds an AgentMail key for
364
- [real email receiving](docs/architecture/real-email-receiving.md), which gives each participant a
356
+ [real email receiving](https://humanish.dev/docs/email-receiving), which gives each participant a
365
357
  fresh hosted inbox.
366
358
 
359
+ ## Give coding agents the skill
360
+
361
+ For coding agents, install the companion skill:
362
+
363
+ ```bash
364
+ npx skills add danielgwilson/humanish --skill humanish
365
+ ```
366
+
367
+ Source: [`skills/humanish/SKILL.md`](skills/humanish/SKILL.md).
368
+
367
369
  ## Find more guides
368
370
 
369
371
  - [Lab manifests](https://humanish.dev/docs/lab-manifests): source directories, route selection,
@@ -375,16 +377,11 @@ fresh hosted inbox.
375
377
  model selection, dated estimates, and study and per-participant caps.
376
378
  - [A signed-in coding agent](https://humanish.dev/docs/local-agents): Codex or Claude Code supplies
377
379
  the participant's model on your existing plan. E2B still needs a key and bills for desktops.
378
- - [The run library](https://humanish.dev/docs/review-surfaces#serve-the-run-library): `humanish serve`
380
+ - [The run library](https://humanish.dev/docs/review-surfaces#serve-the-run-library): `humanish observe --all`
379
381
  serves your runs on loopback, with authenticated remote access,
380
382
  [live viewing from a phone](https://humanish.dev/docs/review-surfaces#watch-a-live-run-from-your-phone)
381
383
  and share-safe public exposure.
382
384
 
383
- Mobile viewport and touch flags do not certify gesture equivalence. The
384
- [2026-09-05 input-conformance correction](https://github.com/danielgwilson/humanish/blob/main/docs/goals/computer-use-actor/receipts/mobile-input-conformance-2026-09-05.md)
385
- qualifies the historical results from phone-sized participants: they describe humanish's
386
- measured input path, not established physical-device app behavior.
387
-
388
385
  ## Drive an already-running local app
389
386
 
390
387
  Use a custom executor and non-vision provider to drive your app's state contract
@@ -399,47 +396,41 @@ Run it after installing `humanish`. It makes no model calls; it proves the
399
396
  integration, not persona behavior. See [state-driven local adapters](https://humanish.dev/docs/computer-use#state-driven-local-adapters)
400
397
  for the supported library seam.
401
398
 
402
- ## Library API
399
+ ## Use humanish as a library
403
400
 
404
401
  `import ... from "humanish"` covers four things:
405
402
 
406
- - run a lab: `runLab`, `RunLabOptions`, `LabOutcome`, `LabResult`, `LabEvent`, `routeOf`,
407
- `parseLabConfig`, `LAB_CONFIG_SCHEMA`;
403
+ - run a study: `runStudy`, `RunStudyOptions`, `StudyOutcome`, `StudyResult`, `StudyEvent`, `routeOf`,
404
+ `parseStudy`, `STUDY_SCHEMA`;
408
405
  - read a run: `verifyRun`, `renderObserver`, `RunBundle`, `ActorTrace`;
409
- - bring a participant: `CuaProvider`, `CuaExecutor`, `ProviderContext`,
406
+ - bring a participant: `ComputerUseProvider`, `ComputerUseExecutor`, `ProviderContext`,
410
407
  `createOpenAiResponsesProvider`, `runComputerUseLoop`, `defaultRedactionHooks`;
411
408
  - score a run: `AdapterScorerModule` and its scoring contexts.
412
409
 
413
410
  Everything else runs through the `humanish` command. The
414
411
  [library page](https://humanish.dev/docs/library) has an example for each, and
415
- [the options contract](docs/contracts/schemas.md#library-options-runlaboptions) lists which routes
412
+ [the options contract](docs/contracts/schemas.md#library-options) lists which routes
416
413
  take which option.
417
414
 
418
- ## Three Roles
419
-
420
- The researcher declares the study, the participant tries the product, and the
421
- stakeholder reads what happened. [Three roles](docs/principles/three-roles.md)
422
- explains the design; the [email-gated signup receipts](https://github.com/danielgwilson/humanish/tree/main/docs/goals/email-gated-signup/receipts/)
423
- show a completed two-participant study and a reported keyboard-accessibility finding.
424
-
425
- ## Telemetry
415
+ ## Check what telemetry sends
426
416
 
427
417
  humanish sends anonymous usage events to PostHog by default. Each event carries
428
418
  the command, the humanish version, your OS and Node major version, whether it
429
419
  ran in CI, the exit code, a duration bucket and a random machine id made on
430
420
  first use. A study adds whether it was a dry run, an outcome word, the
431
421
  participant's brain route, stop and diagnostic categories, and humanish's error
432
- code when it fails. The lab id is sent only when it is a starter lab that
433
- `humanish init` writes; any other lab is sent as `custom`. Your lab ids,
422
+ code when it fails. The study id is sent only when it is a starter study that
423
+ `humanish init` writes; any other study is sent as `custom`. Your study ids,
434
424
  subjects, personas, prompts, paths, run ids and evidence are never sent.
435
425
  `humanish telemetry status` prints the exact event, and `humanish telemetry
436
426
  disable` or `DO_NOT_TRACK=1` turns it off. [TELEMETRY.md](TELEMETRY.md) lists
437
427
  every field.
438
428
 
439
- ## Development
429
+ ## Contribute
440
430
 
441
- Contributors: read [CONTRIBUTING.md](CONTRIBUTING.md) first. It gives the reading order, the
442
- commands CI runs and what a pull request needs.
431
+ Contributors: read
432
+ [CONTRIBUTING.md](https://github.com/danielgwilson/humanish/blob/main/CONTRIBUTING.md) first. It
433
+ gives the reading order, the commands CI runs and what a pull request needs.
443
434
 
444
435
  ```bash
445
436
  pnpm install --frozen-lockfile
@@ -452,27 +443,14 @@ Try the CLI from source:
452
443
  ```bash
453
444
  pnpm humanish watch
454
445
  pnpm humanish verify
455
- pnpm humanish lab list
446
+ pnpm humanish study list
456
447
  ```
457
448
 
458
- Maintainers draft this repository's feedback issues with
459
- `pnpm humanish feedback issue --repo danielgwilson/humanish`. It prints a draft and posts nothing.
460
-
461
- ## Docs
449
+ ## Browse the docs
462
450
 
463
451
  - [User guides and generated CLI reference](https://humanish.dev/docs)
464
- - [Current safety state and goals](docs/goals/current.md)
465
- - [Contributing: reading order, commands and pull requests](CONTRIBUTING.md)
466
- - [Contributor and agent ramp](docs/ramp/README.md)
452
+ - [Contributing: reading order, commands and pull requests](https://github.com/danielgwilson/humanish/blob/main/CONTRIBUTING.md)
453
+ - [Contributor and agent ramp](https://github.com/danielgwilson/humanish/blob/main/docs/ramp/README.md)
467
454
  - [Architecture: the run path, code map and invariants](ARCHITECTURE.md)
468
- - [Project layout: the `humanish/` and `.humanish/` folders](docs/architecture/project-layout.md)
455
+ - [Project layout: the `humanish/` and `.humanish/` folders](https://humanish.dev/docs/project-layout)
469
456
  - [Feedback contract](docs/contracts/feedback.md)
470
- - [Release readiness and gates](docs/release/open-source-readiness.md)
471
-
472
- Dated design documents may preserve historical mechanisms. Start with the
473
- current goals and the executable CLI when checking what is supported.
474
-
475
- ## Release Status
476
-
477
- The package is published on npm. Publishing a new version requires explicit
478
- maintainer authorization; see the [release procedure](docs/release/open-source-readiness.md#publish-procedure).
package/SECURITY.md CHANGED
@@ -1,34 +1,24 @@
1
- # Security Policy
1
+ # Security policy
2
2
 
3
- ## Public-Safety Boundary
3
+ ## Report a vulnerability privately
4
4
 
5
- humanish must not contain or emit PII, PHI, secrets, keys, tokens, raw private
6
- transcripts, private screenshots, private customer data, private patient data,
7
- or private source snippets.
8
-
9
- Do not file public issues that contain sensitive data. Redact the data and
10
- describe the class of problem instead.
11
-
12
- ## Reporting A Vulnerability
13
-
14
- If you find a security issue, open a minimal public issue only when the report
15
- does not disclose exploitable details or sensitive data. Otherwise, contact the
16
- maintainer privately through the repository owner profile.
5
+ Report a vulnerability through GitHub private vulnerability reporting:
6
+ <https://github.com/danielgwilson/humanish/security/advisories/new>. Only you and the maintainer
7
+ see the report until a fix ships. If you cannot use GitHub, email the maintainer at the address in
8
+ `package.json`'s `author` field.
17
9
 
18
10
  Include:
19
11
 
20
- - affected version or commit;
21
- - command run;
22
- - safe reproduction steps;
23
- - redacted evidence path or synthetic fixture;
24
- - whether any generated `.humanish/` artifact may contain sensitive data.
12
+ - the affected version or commit;
13
+ - the command you ran;
14
+ - safe steps to reproduce it;
15
+ - a redacted evidence path or a synthetic fixture;
16
+ - whether a generated `.humanish/` artifact may contain sensitive data.
25
17
 
26
- ## Maintainer Release Checks
18
+ ## Keep sensitive data out of public issues
27
19
 
28
- Before any public release, run:
20
+ humanish must not contain or emit PII, PHI, secrets, keys, tokens, raw private transcripts,
21
+ private screenshots, private customer data, private patient data or private source snippets.
29
22
 
30
- ```bash
31
- pnpm check
32
- pnpm public-surface:scan
33
- pnpm pack:dry-run
34
- ```
23
+ Do not file a public issue that contains sensitive data. Redact it and describe the kind of
24
+ problem.