humanish 0.0.1 → 0.15.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 (196) hide show
  1. package/AGENTS.md +77 -0
  2. package/CONTRIBUTING.md +39 -0
  3. package/LICENSE +21 -0
  4. package/README.md +435 -8
  5. package/SECURITY.md +34 -0
  6. package/dist/actor-contract.d.ts +107 -0
  7. package/dist/actor-contract.js +286 -0
  8. package/dist/actor-contract.js.map +1 -0
  9. package/dist/actor-registry.d.ts +73 -0
  10. package/dist/actor-registry.js +93 -0
  11. package/dist/actor-registry.js.map +1 -0
  12. package/dist/adapter-extension.d.ts +54 -0
  13. package/dist/adapter-extension.js +214 -0
  14. package/dist/adapter-extension.js.map +1 -0
  15. package/dist/argv.d.ts +1 -0
  16. package/dist/argv.js +8 -0
  17. package/dist/argv.js.map +1 -0
  18. package/dist/artifact-reference.d.ts +22 -0
  19. package/dist/artifact-reference.js +47 -0
  20. package/dist/artifact-reference.js.map +1 -0
  21. package/dist/browser-evidence-hygiene.d.ts +7 -0
  22. package/dist/browser-evidence-hygiene.js +40 -0
  23. package/dist/browser-evidence-hygiene.js.map +1 -0
  24. package/dist/claude-agent-sdk.d.ts +94 -0
  25. package/dist/claude-agent-sdk.js +356 -0
  26. package/dist/claude-agent-sdk.js.map +1 -0
  27. package/dist/cli.d.ts +2 -0
  28. package/dist/cli.js +5 -0
  29. package/dist/cli.js.map +1 -0
  30. package/dist/codex-app-server-ui.d.ts +39 -0
  31. package/dist/codex-app-server-ui.js +327 -0
  32. package/dist/codex-app-server-ui.js.map +1 -0
  33. package/dist/codex-app-server.d.ts +141 -0
  34. package/dist/codex-app-server.js +747 -0
  35. package/dist/codex-app-server.js.map +1 -0
  36. package/dist/command-failure.d.ts +29 -0
  37. package/dist/command-failure.js +54 -0
  38. package/dist/command-failure.js.map +1 -0
  39. package/dist/computer-use-actor.d.ts +52 -0
  40. package/dist/computer-use-actor.js +48 -0
  41. package/dist/computer-use-actor.js.map +1 -0
  42. package/dist/computer-use.d.ts +232 -0
  43. package/dist/computer-use.js +615 -0
  44. package/dist/computer-use.js.map +1 -0
  45. package/dist/concurrency.d.ts +1 -0
  46. package/dist/concurrency.js +27 -0
  47. package/dist/concurrency.js.map +1 -0
  48. package/dist/concurrent-shared-world-lab.d.ts +115 -0
  49. package/dist/concurrent-shared-world-lab.js +1092 -0
  50. package/dist/concurrent-shared-world-lab.js.map +1 -0
  51. package/dist/core/git-state.d.ts +31 -0
  52. package/dist/core/git-state.js +142 -0
  53. package/dist/core/git-state.js.map +1 -0
  54. package/dist/core/index.d.ts +4 -0
  55. package/dist/core/index.js +3 -0
  56. package/dist/core/index.js.map +1 -0
  57. package/dist/core/run-primitives.d.ts +66 -0
  58. package/dist/core/run-primitives.js +120 -0
  59. package/dist/core/run-primitives.js.map +1 -0
  60. package/dist/cua-actor-lab.d.ts +620 -0
  61. package/dist/cua-actor-lab.js +2834 -0
  62. package/dist/cua-actor-lab.js.map +1 -0
  63. package/dist/device-presets.d.ts +67 -0
  64. package/dist/device-presets.js +50 -0
  65. package/dist/device-presets.js.map +1 -0
  66. package/dist/e2b-desktop-executor.d.ts +101 -0
  67. package/dist/e2b-desktop-executor.js +309 -0
  68. package/dist/e2b-desktop-executor.js.map +1 -0
  69. package/dist/e2b-desktop-launch.d.ts +144 -0
  70. package/dist/e2b-desktop-launch.js +59 -0
  71. package/dist/e2b-desktop-launch.js.map +1 -0
  72. package/dist/e2b-detached.d.ts +53 -0
  73. package/dist/e2b-detached.js +130 -0
  74. package/dist/e2b-detached.js.map +1 -0
  75. package/dist/e2b-terminal-lab.d.ts +345 -0
  76. package/dist/e2b-terminal-lab.js +1467 -0
  77. package/dist/e2b-terminal-lab.js.map +1 -0
  78. package/dist/env-file.d.ts +14 -0
  79. package/dist/env-file.js +108 -0
  80. package/dist/env-file.js.map +1 -0
  81. package/dist/feedback.d.ts +51 -0
  82. package/dist/feedback.js +313 -0
  83. package/dist/feedback.js.map +1 -0
  84. package/dist/image-evidence.d.ts +2 -0
  85. package/dist/image-evidence.js +33 -0
  86. package/dist/image-evidence.js.map +1 -0
  87. package/dist/index.d.ts +63 -0
  88. package/dist/index.js +33 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/init-templates.d.ts +12 -0
  91. package/dist/init-templates.js +369 -0
  92. package/dist/init-templates.js.map +1 -0
  93. package/dist/init.d.ts +26 -0
  94. package/dist/init.js +343 -0
  95. package/dist/init.js.map +1 -0
  96. package/dist/lab-app-runner.d.ts +78 -0
  97. package/dist/lab-app-runner.js +403 -0
  98. package/dist/lab-app-runner.js.map +1 -0
  99. package/dist/lab-config.d.ts +578 -0
  100. package/dist/lab-config.js +1751 -0
  101. package/dist/lab-config.js.map +1 -0
  102. package/dist/lab-engine.d.ts +77 -0
  103. package/dist/lab-engine.js +216 -0
  104. package/dist/lab-engine.js.map +1 -0
  105. package/dist/lab-preflight.d.ts +67 -0
  106. package/dist/lab-preflight.js +385 -0
  107. package/dist/lab-preflight.js.map +1 -0
  108. package/dist/labs.d.ts +53 -0
  109. package/dist/labs.js +176 -0
  110. package/dist/labs.js.map +1 -0
  111. package/dist/observer-assets.d.ts +2 -0
  112. package/dist/observer-assets.js +2630 -0
  113. package/dist/observer-assets.js.map +1 -0
  114. package/dist/observer-data.d.ts +63 -0
  115. package/dist/observer-data.js +145 -0
  116. package/dist/observer-data.js.map +1 -0
  117. package/dist/observer-static.d.ts +39 -0
  118. package/dist/observer-static.js +192 -0
  119. package/dist/observer-static.js.map +1 -0
  120. package/dist/observer.d.ts +46 -0
  121. package/dist/observer.js +353 -0
  122. package/dist/observer.js.map +1 -0
  123. package/dist/openai-responses-cu.d.ts +113 -0
  124. package/dist/openai-responses-cu.js +531 -0
  125. package/dist/openai-responses-cu.js.map +1 -0
  126. package/dist/oss-lab.d.ts +52 -0
  127. package/dist/oss-lab.js +299 -0
  128. package/dist/oss-lab.js.map +1 -0
  129. package/dist/oss-meta-lab-scoring.d.ts +15 -0
  130. package/dist/oss-meta-lab-scoring.js +145 -0
  131. package/dist/oss-meta-lab-scoring.js.map +1 -0
  132. package/dist/oss-meta-lab.d.ts +279 -0
  133. package/dist/oss-meta-lab.js +4889 -0
  134. package/dist/oss-meta-lab.js.map +1 -0
  135. package/dist/oss-remote-telemetry.d.ts +77 -0
  136. package/dist/oss-remote-telemetry.js +403 -0
  137. package/dist/oss-remote-telemetry.js.map +1 -0
  138. package/dist/persona.d.ts +35 -0
  139. package/dist/persona.js +133 -0
  140. package/dist/persona.js.map +1 -0
  141. package/dist/pi-agent-core.d.ts +77 -0
  142. package/dist/pi-agent-core.js +203 -0
  143. package/dist/pi-agent-core.js.map +1 -0
  144. package/dist/program.d.ts +54 -0
  145. package/dist/program.js +2347 -0
  146. package/dist/program.js.map +1 -0
  147. package/dist/redaction.d.ts +90 -0
  148. package/dist/redaction.js +292 -0
  149. package/dist/redaction.js.map +1 -0
  150. package/dist/run.d.ts +784 -0
  151. package/dist/run.js +4555 -0
  152. package/dist/run.js.map +1 -0
  153. package/dist/scripted-browser-actor.d.ts +294 -0
  154. package/dist/scripted-browser-actor.js +1286 -0
  155. package/dist/scripted-browser-actor.js.map +1 -0
  156. package/dist/scripted-browser-lab.d.ts +107 -0
  157. package/dist/scripted-browser-lab.js +738 -0
  158. package/dist/scripted-browser-lab.js.map +1 -0
  159. package/dist/shared-world-lab.d.ts +208 -0
  160. package/dist/shared-world-lab.js +1048 -0
  161. package/dist/shared-world-lab.js.map +1 -0
  162. package/dist/source-archive.d.ts +82 -0
  163. package/dist/source-archive.js +365 -0
  164. package/dist/source-archive.js.map +1 -0
  165. package/dist/stop-conditions.d.ts +26 -0
  166. package/dist/stop-conditions.js +66 -0
  167. package/dist/stop-conditions.js.map +1 -0
  168. package/dist/terminal-agent-actor.d.ts +36 -0
  169. package/dist/terminal-agent-actor.js +23 -0
  170. package/dist/terminal-agent-actor.js.map +1 -0
  171. package/docs/architecture/actor-contract.md +431 -0
  172. package/docs/architecture/github-feedback-loop.md +189 -0
  173. package/docs/architecture/local-codex-tui-actor.md +213 -0
  174. package/docs/architecture/observer.md +118 -0
  175. package/docs/architecture/oss-lab-poc.md +242 -0
  176. package/docs/architecture/project-layout.md +166 -0
  177. package/docs/architecture/state-driven-executor.md +203 -0
  178. package/docs/architecture/terminal-product-lane.md +148 -0
  179. package/docs/contracts/adapter-fixtures.md +80 -0
  180. package/docs/contracts/core.md +71 -0
  181. package/docs/contracts/feedback.md +145 -0
  182. package/docs/contracts/policy.md +305 -0
  183. package/docs/contracts/run-bundle.md +358 -0
  184. package/docs/contracts/schemas.md +984 -0
  185. package/docs/goals/current.md +409 -0
  186. package/docs/principles/invariants-and-defaults.md +135 -0
  187. package/docs/principles/self-driving-harness.md +129 -0
  188. package/docs/product/open-source-install-experience.md +229 -0
  189. package/docs/ramp/README.md +200 -0
  190. package/docs/release/open-source-readiness.md +208 -0
  191. package/docs/release/public-readiness-standard.md +205 -0
  192. package/docs/roadmap/world-class-open-source-v0.md +311 -0
  193. package/package.json +102 -8
  194. package/skills/humanish/SKILL.md +244 -0
  195. package/skills/humanish/agents/openai.yaml +7 -0
  196. package/index.js +0 -1
@@ -0,0 +1,311 @@
1
+ # World-Class Open-Source V0 Roadmap
2
+
3
+ Date: 2026-06-01
4
+
5
+ Status: HISTORICAL (banner added 2026-06-11). This was the staged v0 build
6
+ plan; it is kept as delivery history and is not maintained. Several "Non-Goals
7
+ For V0" have since shipped as explicit opt-ins (the OpenAI computer-use actor,
8
+ live E2B desktop labs), and the lab schema is now `humanish.lab.v2`. For the
9
+ live goal state read [`docs/goals/current.md`](../goals/current.md).
10
+
11
+ ## Target Outcome
12
+
13
+ A maintainer can install `humanish` into a normal JavaScript app, let their
14
+ coding agent run setup, and get a public-safe persona simulation harness with:
15
+
16
+ - committed `humanish/` source plane;
17
+ - ignored `.humanish/` runtime plane;
18
+ - `commander` CLI;
19
+ - safe `init`;
20
+ - synthetic dry-run bundle;
21
+ - verifier;
22
+ - observer;
23
+ - public-safe feedback issue draft;
24
+ - clear docs and agent skill.
25
+
26
+ ## Stage 0: Repo Plan And Issue Queue
27
+
28
+ Status: complete enough to start implementation.
29
+
30
+ Proof:
31
+
32
+ - GitHub project `humanish`;
33
+ - seeded issues;
34
+ - future-public boundary docs;
35
+ - feedback issue-draft doctrine.
36
+ - layout/install/goal docs;
37
+ - implementation tickets for the install path.
38
+
39
+ Primary issue queue:
40
+
41
+ - [#13 package: scaffold npm package and Commander humanish binary](https://github.com/danielgwilson/humanish/issues/13)
42
+ - [#14 init: scaffold committed humanish source and ignored .humanish runtime layout](https://github.com/danielgwilson/humanish/issues/14)
43
+ - [#16 fixtures: create target app fixture for init, dry-run, verify, and observer proof](https://github.com/danielgwilson/humanish/issues/16)
44
+ - [#7 cli: scaffold doctor, run --dry-run, review, verify, runs, and watch](https://github.com/danielgwilson/humanish/issues/7)
45
+ - [#6 core: run IDs, artifact paths, git state, history, and lifecycle primitives](https://github.com/danielgwilson/humanish/issues/6)
46
+ - [#10 observer: static mission-control viewer over fixture bundle](https://github.com/danielgwilson/humanish/issues/10)
47
+ - [#5 feedback: specify public issue-draft CLI command](https://github.com/danielgwilson/humanish/issues/5)
48
+ - [#15 skill: package agent setup guidance for installing Humanish](https://github.com/danielgwilson/humanish/issues/15)
49
+ - [#17 release: open-source readiness, package metadata, license, and publish dry-run](https://github.com/danielgwilson/humanish/issues/17)
50
+
51
+ ## Stage 1: Package Scaffold
52
+
53
+ Build the minimum npm package:
54
+
55
+ - `package.json`;
56
+ - TypeScript config;
57
+ - `src/cli.ts`;
58
+ - `commander`;
59
+ - test runner;
60
+ - lint/typecheck/check scripts;
61
+ - binary name `humanish`;
62
+ - stable JSON command envelope.
63
+
64
+ Proof:
65
+
66
+ ```bash
67
+ pnpm install
68
+ pnpm check
69
+ pnpm humanish -- --help
70
+ ```
71
+
72
+ ## Stage 2: Project Layout And Init
73
+
74
+ Implement `humanish init`:
75
+
76
+ - creates committed `humanish/`;
77
+ - creates ignored `.humanish/`;
78
+ - writes starter synthetic personas/scenarios/policies;
79
+ - patches `package.json` scripts;
80
+ - updates `.gitignore`;
81
+ - supports `--dry-run`, `--yes`, and `--json`.
82
+
83
+ Proof:
84
+
85
+ ```bash
86
+ pnpm test
87
+ pnpm humanish -- init --dry-run --json
88
+ ```
89
+
90
+ Fixture proof should run against a temporary app fixture, not this repo only.
91
+
92
+ ## Stage 3: Run Bundle And Verify
93
+
94
+ Implement a synthetic dry-run bundle:
95
+
96
+ - run id;
97
+ - manifest;
98
+ - scenario/persona selection;
99
+ - lifecycle events;
100
+ - review skeleton;
101
+ - redaction result;
102
+ - artifact paths;
103
+ - source/git state.
104
+
105
+ Implement `humanish verify` over that bundle.
106
+
107
+ Proof:
108
+
109
+ ```bash
110
+ pnpm humanish -- run --dry-run --json
111
+ pnpm humanish -- verify --run latest --json
112
+ ```
113
+
114
+ ## Stage 4: Observer
115
+
116
+ Status: upgraded from static report to mission-control substrate for synthetic
117
+ stream contracts.
118
+
119
+ Implemented:
120
+
121
+ - normalized `observer/observer-data.json` view model;
122
+ - `events.ndjson` event stream contract;
123
+ - stream-shaped sim lanes for UI, CLI, TUI, and Codex UI;
124
+ - localhost watch server with no-store polling;
125
+ - mission-control grid and focus mode;
126
+ - terminal/TUI transcript stage;
127
+ - evidence rail for events, artifacts, and gaps;
128
+ - public-safe Codex UI stream contract with no raw provider payloads.
129
+
130
+ Still next:
131
+
132
+ - real browser actor adapter;
133
+ - real PTY capture;
134
+ - native Codex app-server adapter;
135
+ - screenshot/trace gallery from real products;
136
+ - reviewer acceptance gates over live product behavior.
137
+
138
+ Proof:
139
+
140
+ ```bash
141
+ pnpm humanish -- watch
142
+ ```
143
+
144
+ If browser verification is added, use screenshots of the observer as proof.
145
+
146
+ ## Stage 5: Feedback Issue Draft
147
+
148
+ Status: implemented for the synthetic dry-run bundle path.
149
+
150
+ Implement:
151
+
152
+ ```bash
153
+ humanish feedback draft --run latest --json
154
+ humanish feedback issue --run latest --repo owner/repo --format markdown
155
+ humanish feedback issue-url --run latest --repo owner/repo
156
+ ```
157
+
158
+ Rules:
159
+
160
+ - no GitHub API mutation;
161
+ - no tokens;
162
+ - no Projects;
163
+ - redaction must pass;
164
+ - dry-run-only claims are labeled as contract proof, not product proof;
165
+ - issue body includes `humanish_feedback` block.
166
+
167
+ Proof:
168
+
169
+ ```bash
170
+ pnpm humanish -- feedback issue --run latest --repo example/app --format markdown
171
+ ```
172
+
173
+ ## Stage 6: Agent Skill
174
+
175
+ Status: implemented as an installer-visible skills.sh skill under
176
+ `skills/humanish/SKILL.md`.
177
+
178
+ Create a shareable skill package that teaches agents to install and configure
179
+ Humanish in target repos.
180
+
181
+ It should cover:
182
+
183
+ - `npm i -D humanish`;
184
+ - `npx humanish init`;
185
+ - committed vs ignored layout;
186
+ - public-safety rules;
187
+ - creating personas;
188
+ - creating scenarios;
189
+ - adding E2B/OpenAI env var names without values;
190
+ - running doctor/run/watch/verify/feedback issue;
191
+ - troubleshooting.
192
+
193
+ Proof:
194
+
195
+ ```bash
196
+ DISABLE_TELEMETRY=1 npx skills add . --list
197
+ ```
198
+
199
+ Future proof: fresh-agent fixture follows the skill and reaches dry-run +
200
+ issue draft.
201
+
202
+ ## Stage 6.5: Release Readiness
203
+
204
+ Status: public package candidate, blocked only on explicit publish approval.
205
+
206
+ Readiness lives in
207
+ [`docs/release/open-source-readiness.md`](../release/open-source-readiness.md).
208
+ The package has MIT metadata and public npm package shape. `npm publish`
209
+ remains a human release action.
210
+
211
+ ## Stage 6.75: Self-Dogfood Config
212
+
213
+ Status: implemented for dry-run contract proof.
214
+
215
+ The repository now includes committed `humanish/` source files so Humanish can run
216
+ against `humanish` itself. This makes `doctor` green on the repo, lets
217
+ dry-run bundles read and digest `humanish/personas/synthetic-new-user.yaml` and
218
+ `humanish/scenarios/first-run-smoke.yaml`, and keeps the live Codex TUI actor gap
219
+ explicit. The live Codex TUI dogfood path and noninteractive `codex-exec`
220
+ fanout hardening are tracked in
221
+ [#28](https://github.com/danielgwilson/humanish/issues/28).
222
+
223
+ ## Stage 6.8: One-Command Watch UX
224
+
225
+ Status: implemented for synthetic contract-proof stream lanes.
226
+
227
+ `humanish watch` now creates a fresh four-lane synthetic run, renders Observer,
228
+ starts a localhost watch server, opens the served Observer in the browser, and
229
+ keeps the shell attached. The CI-safe form is `humanish watch --json --no-open`.
230
+ `--sims <n>` remains the explicit scale control, and `--run <id>` watches
231
+ existing evidence.
232
+
233
+ ## Stage 6.8: Lab Manifests
234
+
235
+ Status: implemented as the generic source shape for reusable runs.
236
+
237
+ Humanish now resolves `.yaml` lab manifests from committed `humanish/labs/`,
238
+ ignored `.humanish/labs/`, ignored `.humanish/local/labs/`, or an explicit
239
+ `.yaml` path. The human path is `humanish watch <lab>`; the agent/CI path is
240
+ `humanish lab run <lab> --json --no-open`; discovery is `humanish lab list` and
241
+ `humanish lab inspect <lab>`.
242
+
243
+ Private or maintainer-only dogfood belongs in ignored lab manifests plus
244
+ explicit `--env-file`; the public package should not hardcode private target
245
+ names or require broad inherited job env.
246
+
247
+ ## Stage 6.9: Maintainer OSS Meta-Lab
248
+
249
+ Status: implemented as repo-owned `humanish/labs/oss.yaml` plus compatibility
250
+ aliases, with a retained disposable smoke harness.
251
+
252
+ `humanish watch oss` opens the top-level Observer for authorized-repo meta-sims.
253
+ Each lane is assigned a GitHub `owner/repo` slug from `--repos` or repeated
254
+ `--repo` values and carries a headed E2B desktop for setting up Humanish inside
255
+ that repo, starting the target app where feasible, and keeping the nested
256
+ Observer visible.
257
+ Default public targets should be apps, CLIs, or agent-facing tools with
258
+ observable user surfaces. Frameworks, starters, and utility libraries are
259
+ acceptable only when the explicit scenario is developer-experience testing.
260
+ When live keys are present, Humanish launches E2B desktops, uploads the locally
261
+ packed Humanish package, starts visible bootstrap terminals, clones each assigned
262
+ repo inside the desktop, runs nested Humanish setup/proof commands, opens
263
+ desktop/mobile app windows plus the nested Observer in the sandbox browser, and
264
+ starts a nonblocking Codex actor attempt. Attached watch mode overlays live E2B
265
+ stream URLs only in memory; durable run artifacts keep screenshots/status, not
266
+ auth-bearing URLs. Private repos are maintainer-only, require an authorized
267
+ runtime GitHub token, and redact repo labels in durable artifacts by default.
268
+
269
+ `humanish lab run oss-smoke` keeps the earlier clone/discard proof loop: shallow
270
+ clone lightweight public GitHub repositories into ignored `.humanish/tmp`, apply
271
+ Humanish setup in disposable clones, run the four-lane synthetic Observer proof,
272
+ verify it, record git-status evidence, write an ignored
273
+ `.humanish/lab/oss/<run-id>/` report, and remove clones by default.
274
+
275
+ Proof:
276
+
277
+ ```bash
278
+ pnpm humanish -- watch oss --detach --open --repos CorentinTh/it-tools,drawdb-io/drawdb
279
+ pnpm humanish -- lab run oss --dry-run --json --no-open --repos CorentinTh/it-tools,drawdb-io/drawdb
280
+ pnpm humanish -- lab run oss-smoke --limit 1 --json
281
+ ```
282
+
283
+ Next substrate work: upgrade nested app-url render proof into provider-backed
284
+ browser personas that drive the target app and add richer process/filesystem
285
+ telemetry for Codex actor health.
286
+
287
+ ## Stage 7: Local Browser And First Real Adapter
288
+
289
+ Only after the package and dry-run path are stable:
290
+
291
+ - local app target detection;
292
+ - Playwright/browser substrate;
293
+ - first scripted browser scenario;
294
+ - browser-app adapter fixture.
295
+
296
+ Proof:
297
+
298
+ - real browser screenshots in `.humanish/runs`;
299
+ - observer renders screenshots;
300
+ - `verify` validates bundle.
301
+
302
+ ## Non-Goals For V0
303
+
304
+ - live E2B as required first-run behavior;
305
+ - OpenAI computer-use actor;
306
+ - live GitHub mutation;
307
+ - hosted queues/databases/webhooks;
308
+ - provider spend as required first-run behavior;
309
+ - production deploys;
310
+ - real user/persona data;
311
+ - private upstream artifacts.
package/package.json CHANGED
@@ -1,15 +1,109 @@
1
1
  {
2
2
  "name": "humanish",
3
- "version": "0.0.1",
4
- "description": "Reserved for the humanish persona-simulation harness (formerly homun): run realistic synthetic users against your app from any project directory. Rename in progress; real package lands here shortly.",
3
+ "version": "0.15.0",
4
+ "description": "Open-source-safe CLI for persona simulation, observer review, and public-safe feedback drafts.",
5
+ "author": "Daniel G Wilson <daniel@danielgwilson.com>",
6
+ "keywords": [
7
+ "agent-harness",
8
+ "cli",
9
+ "persona-simulation",
10
+ "ui-testing",
11
+ "ux-research"
12
+ ],
13
+ "type": "module",
5
14
  "license": "MIT",
6
- "author": "Daniel G Wilson",
7
- "homepage": "https://github.com/danielgwilson/homun",
15
+ "packageManager": "pnpm@11.5.2",
16
+ "main": "./dist/index.js",
17
+ "types": "./dist/index.d.ts",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/index.d.ts",
21
+ "import": "./dist/index.js"
22
+ }
23
+ },
24
+ "engines": {
25
+ "node": ">=20"
26
+ },
27
+ "bin": {
28
+ "humanish": "./dist/cli.js"
29
+ },
30
+ "files": [
31
+ "AGENTS.md",
32
+ "dist",
33
+ "docs/architecture",
34
+ "docs/assets",
35
+ "docs/contracts",
36
+ "docs/goals/current.md",
37
+ "docs/principles",
38
+ "docs/product",
39
+ "docs/ramp",
40
+ "docs/release",
41
+ "docs/roadmap",
42
+ "skills",
43
+ "README.md",
44
+ "LICENSE",
45
+ "SECURITY.md",
46
+ "CONTRIBUTING.md"
47
+ ],
48
+ "publishConfig": {
49
+ "access": "public"
50
+ },
51
+ "scripts": {
52
+ "build": "tsc -p tsconfig.build.json && node --eval \"import('node:fs').then(({ chmodSync }) => chmodSync('dist/cli.js', 0o755))\"",
53
+ "check": "pnpm typecheck && pnpm test && pnpm build",
54
+ "humanish": "tsx src/cli.ts",
55
+ "pack:dry-run": "npm pack --dry-run",
56
+ "prepack": "pnpm build",
57
+ "public-surface:scan": "node scripts/public-surface-scan.mjs",
58
+ "release:check": "pnpm check && pnpm public-surface:scan && pnpm skill:check && npm pack --dry-run",
59
+ "skill:check": "DISABLE_TELEMETRY=1 npx skills add . --list",
60
+ "test": "vitest run",
61
+ "typecheck": "tsc -p tsconfig.json --noEmit",
62
+ "humanish:doctor": "pnpm humanish -- doctor",
63
+ "humanish:run": "pnpm humanish -- run --dry-run",
64
+ "humanish:watch": "pnpm humanish -- watch",
65
+ "humanish:watch:ci": "pnpm humanish -- watch --json --no-open",
66
+ "humanish:dogfood": "pnpm humanish -- watch",
67
+ "humanish:verify": "pnpm humanish -- verify",
68
+ "humanish:feedback": "pnpm humanish -- feedback issue --repo danielgwilson/humanish",
69
+ "humanish:lab:list": "pnpm humanish -- lab list",
70
+ "humanish:lab:oss": "pnpm humanish -- lab run oss",
71
+ "humanish:lab:oss:ci": "pnpm humanish -- lab run oss --dry-run --json --no-open",
72
+ "humanish:lab:oss:smoke": "pnpm humanish -- lab run oss-smoke"
73
+ },
8
74
  "repository": {
9
75
  "type": "git",
10
- "url": "git+https://github.com/danielgwilson/homun.git"
76
+ "url": "https://github.com/danielgwilson/humanish.git"
77
+ },
78
+ "bugs": {
79
+ "url": "https://github.com/danielgwilson/humanish/issues"
80
+ },
81
+ "homepage": "https://github.com/danielgwilson/humanish#readme",
82
+ "dependencies": {
83
+ "commander": "^14.0.3",
84
+ "playwright-core": "^1.60.0",
85
+ "pngjs": "^7.0.0",
86
+ "yaml": "^2.9.0"
87
+ },
88
+ "peerDependencies": {
89
+ "@anthropic-ai/claude-agent-sdk": "^0.3.0",
90
+ "@e2b/desktop": "^2.2.3"
91
+ },
92
+ "peerDependenciesMeta": {
93
+ "@anthropic-ai/claude-agent-sdk": {
94
+ "optional": true
95
+ },
96
+ "@e2b/desktop": {
97
+ "optional": true
98
+ }
11
99
  },
12
- "keywords": ["persona-simulation", "synthetic-users", "testing-harness", "computer-use"],
13
- "files": ["README.md", "index.js"],
14
- "main": "index.js"
100
+ "devDependencies": {
101
+ "@anthropic-ai/claude-agent-sdk": "^0.3.0",
102
+ "@e2b/desktop": "^2.2.3",
103
+ "@types/node": "^20.19.41",
104
+ "@types/pngjs": "^6.0.5",
105
+ "tsx": "^4.22.4",
106
+ "typescript": "^6.0.3",
107
+ "vitest": "^4.1.7"
108
+ }
15
109
  }
@@ -0,0 +1,244 @@
1
+ ---
2
+ name: humanish
3
+ description: Install and configure Humanish CLI in a JavaScript app as an open-source-safe persona simulation harness. Use when an agent needs to add humanish, run safe first setup, create synthetic personas or scenarios, configure env var names without values, run verification and Observer commands, or draft public-safe feedback issues without GitHub mutation.
4
+ ---
5
+
6
+ # Humanish CLI
7
+
8
+ Use this skill to add Humanish to a target app without relying on chat memory or
9
+ private artifacts. Keep every example synthetic and public-safe.
10
+
11
+ ## Hard Boundary
12
+
13
+ Never read, copy, commit, summarize, or generate PII, PHI, secrets, keys,
14
+ tokens, raw private transcripts, private screenshots, raw customer data, raw
15
+ patient data, or private upstream artifacts.
16
+
17
+ Do not edit `.env` or secret files. Do not paste credential values. Use env var
18
+ names only, usually `OPENAI_API_KEY` and `E2B_API_KEY`. For live local runs,
19
+ prefer an explicit ignored env file passed with `--env-file <path>`; do not
20
+ assume broad inherited job env is safe. Stop before live provider spend,
21
+ hosted execution, deploys, public tunnels, or GitHub mutation unless the user
22
+ explicitly approves that exact action.
23
+
24
+ ## Setup Workflow
25
+
26
+ 1. Inspect public target-repo files only: `package.json`, docs, route/app
27
+ structure, test scripts, and `.gitignore`.
28
+ 2. Install Humanish with the repo's package manager:
29
+
30
+ ```bash
31
+ npm i -D humanish
32
+ ```
33
+
34
+ The package is `humanish`; the installed binary is `humanish`. After
35
+ installation, `npx humanish ...` resolves the local project binary. For a
36
+ one-shot command before installation, use
37
+ `npx --package humanish humanish ...` to guarantee the binary comes from
38
+ the `humanish` registry package rather than a same-named command already
39
+ on the PATH.
40
+
41
+ 3. Preview setup:
42
+
43
+ ```bash
44
+ npx humanish init --dry-run --json
45
+ ```
46
+
47
+ 4. Apply setup after the planned changes are understood:
48
+
49
+ ```bash
50
+ npx humanish init --yes --json
51
+ ```
52
+
53
+ 5. Confirm the layout:
54
+ - commit `humanish/` source files;
55
+ - ignore `.humanish/` runtime artifacts;
56
+ - keep committed labs under `humanish/labs/*.yaml`;
57
+ - keep private/local labs under ignored `.humanish/labs/*.yaml` or
58
+ `.humanish/local/labs/*.yaml`;
59
+ - keep `.env.example` commit-safe and value-free;
60
+ - never commit generated run bundles.
61
+
62
+ ## Format Stack
63
+
64
+ When creating or editing Humanish files:
65
+
66
+ - use `.yaml` for human-authored Humanish source: personas, scenarios,
67
+ policies, labs, review vocabulary, and milestones;
68
+ - use `.ts` for executable integration: `humanish/config.ts`, adapters, route
69
+ catalogs, and app launch logic;
70
+ - use `.json` or `.ndjson` for generated machine artifacts, Observer data, run
71
+ bundles, event streams, and synthetic fixtures.
72
+
73
+ Do not create `.yml` files under `humanish/`; `.yml` is for outside ecosystem
74
+ conventions such as GitHub Actions workflows. Do not introduce TOML unless the
75
+ target project has a concrete scalar global-config need that YAML, TypeScript,
76
+ or JSON does not serve.
77
+
78
+ ## Authoring Personas And Scenarios
79
+
80
+ Create or edit only synthetic files under `humanish/`.
81
+
82
+ Personas should describe motivations, accessibility needs, experience level,
83
+ device assumptions, and risk tolerance. Avoid names, emails, addresses,
84
+ accounts, screenshots, logs, tickets, transcripts, analytics rows, or anything
85
+ copied from a real user.
86
+
87
+ Scenarios should define the target app surface, start URL, task intent,
88
+ success signals, and failure signals. Keep app-specific truth in the target
89
+ repo's `humanish/` files, not in the package or this skill.
90
+
91
+ When the app can run locally, make at least one scenario executable with a
92
+ `browser.steps` manifest so `humanish run --app-url` can drive the app instead
93
+ of falling back to the generic two-step proof:
94
+
95
+ ```yaml
96
+ schema: humanish.scenario.v1
97
+ id: product-core-flow
98
+ title: Product core flow
99
+ persona: synthetic-new-user
100
+ goal: Reach and verify the first meaningful app state with synthetic data.
101
+ mode: browser
102
+ browser:
103
+ startPath: /
104
+ steps:
105
+ - id: open-home
106
+ label: Open the app
107
+ action: goto
108
+ path: /
109
+ expect:
110
+ text: "Get started"
111
+ - id: enter-synthetic-input
112
+ label: Enter synthetic fixture input
113
+ action: fill
114
+ selector: "input[name='query']"
115
+ value: "synthetic fixture"
116
+ - id: submit-primary-action
117
+ label: Submit the primary action
118
+ action: click
119
+ selector: "button[type='submit']"
120
+ expect:
121
+ stateChanged: true
122
+ ```
123
+
124
+ Supported actions are `goto`, `fill`, `click`, `assertText`, `waitForText`,
125
+ and `waitForSelector`. Supported expectations are `text`, `selectorVisible`,
126
+ `urlIncludes`, and `stateChanged`. Use public-safe selectors and synthetic
127
+ values only. Do not write real emails, names, customer data, tickets, logs, or
128
+ tokens into scenario files.
129
+
130
+ ## Authoring Labs
131
+
132
+ Create reusable simulation runs as `.yaml` lab manifests:
133
+
134
+ ```yaml
135
+ schema: humanish.lab.v2
136
+ id: first-run
137
+ title: First-run synthetic Observer
138
+ subject:
139
+ source: this-repo
140
+ actors:
141
+ - type: synthetic-persona
142
+ count: 4
143
+ scenario:
144
+ mode: dry-run
145
+ defaults:
146
+ open: true
147
+ ```
148
+
149
+ A lab is a composition (`subject` × `actors` × `execution` × `scenario` ×
150
+ `policies`), not a hardcoded kind; there is no v1 compatibility. Run
151
+ `npx humanish lab inspect <lab>` to see how a manifest parses, including
152
+ warnings for fields the engine does not consume yet.
153
+
154
+ Use committed `humanish/labs/*.yaml` for public-safe, reproducible labs. Use
155
+ ignored `.humanish/labs/*.yaml` or `.humanish/local/labs/*.yaml` for private repo
156
+ targets, local-only dogfood, or machine-specific settings. Never commit private
157
+ repo names, stream URLs, credential values, screenshots, logs, source snippets,
158
+ or operational details.
159
+
160
+ Useful commands:
161
+
162
+ ```bash
163
+ npx humanish lab list
164
+ npx humanish lab inspect first-run
165
+ npx humanish watch first-run
166
+ npx humanish lab run first-run --json --no-open
167
+ ```
168
+
169
+ ## First Proof Run
170
+
171
+ Run the no-credentials path first. This proves Humanish artifact plumbing, not
172
+ target app behavior:
173
+
174
+ ```bash
175
+ npx humanish doctor
176
+ npx humanish watch
177
+ npx humanish verify --run latest --json
178
+ npx humanish feedback issue --run latest --repo example/app --format markdown
179
+ ```
180
+
181
+ For CI or non-interactive proof:
182
+
183
+ ```bash
184
+ npx humanish watch --json --no-open
185
+ npx humanish lab run first-run --json --no-open
186
+ ```
187
+
188
+ The feedback command prints a public-safe Markdown draft. It must not call the
189
+ GitHub API, require a token, update Projects, use provider credits, or claim
190
+ product behavior proof from a dry run.
191
+
192
+ When the target app can run locally, prove real browser behavior with
193
+ `run --app-url` after starting the app on loopback:
194
+
195
+ ```bash
196
+ # in another terminal, start the target app on 127.0.0.1 or localhost
197
+ npx humanish run --app-url http://127.0.0.1:<port> --sims 2 --json
198
+ npx humanish verify --run latest --json
199
+ npx humanish watch --run latest --detach --no-open --json
200
+ ```
201
+
202
+ Do not use `humanish watch --sims ...` as a substitute for app-url proof.
203
+ `watch` renders or follows Observer evidence; `run --app-url` is the command
204
+ that captures live desktop/mobile browser evidence against a running app.
205
+
206
+ ## Optional Live E2B Lab
207
+
208
+ Live headed E2B desktop lanes are optional. Add the substrate dependency only
209
+ when the user explicitly wants live E2B execution:
210
+
211
+ ```bash
212
+ npm i -D @e2b/desktop
213
+ ```
214
+
215
+ Then confirm env var names are documented without values:
216
+
217
+ ```bash
218
+ E2B_API_KEY
219
+ OPENAI_API_KEY
220
+ ```
221
+
222
+ Do not paste values into files, prompts, run bundles, issue drafts, or logs.
223
+ Load local values only at invocation time:
224
+
225
+ ```bash
226
+ npx humanish watch .humanish/labs/local-live.yaml --env-file .humanish/local/provider.env
227
+ ```
228
+
229
+ When choosing dogfood targets, prefer apps, CLIs, or agent-facing tools with a
230
+ real observable user surface and local run path. Do not use libraries,
231
+ frameworks, starters, or infrastructure packages as default targets unless the
232
+ declared scenario is developer-experience testing. Private repos are allowed
233
+ only as explicit maintainer-authorized runs with repo redaction left on; never
234
+ publish their names, screenshots, logs, source snippets, or operational details.
235
+
236
+ ## Reporting Back
237
+
238
+ Report:
239
+
240
+ - files changed in the target repo;
241
+ - exact proof commands run;
242
+ - generated local artifact paths under `.humanish/`;
243
+ - whether redaction passed;
244
+ - what remains blocked before live browser, OpenAI, E2B, or GitHub mutation.
@@ -0,0 +1,7 @@
1
+ interface:
2
+ display_name: "Humanish CLI"
3
+ short_description: "Set up public-safe persona simulation"
4
+ default_prompt: "Use $humanish to install Humanish in this repo, scaffold synthetic personas and scenarios, run the safe Observer proof, and report the public-safe artifacts. If the app can run locally, start it on loopback and use `humanish run --app-url http://127.0.0.1:<port> --sims 2` before rendering Observer with `humanish watch --run latest`; do not treat `watch --sims` as app behavior proof."
5
+
6
+ policy:
7
+ allow_implicit_invocation: true
package/index.js DELETED
@@ -1 +0,0 @@
1
- module.exports = {};