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.
- package/AGENTS.md +77 -0
- package/CONTRIBUTING.md +39 -0
- package/LICENSE +21 -0
- package/README.md +435 -8
- package/SECURITY.md +34 -0
- package/dist/actor-contract.d.ts +107 -0
- package/dist/actor-contract.js +286 -0
- package/dist/actor-contract.js.map +1 -0
- package/dist/actor-registry.d.ts +73 -0
- package/dist/actor-registry.js +93 -0
- package/dist/actor-registry.js.map +1 -0
- package/dist/adapter-extension.d.ts +54 -0
- package/dist/adapter-extension.js +214 -0
- package/dist/adapter-extension.js.map +1 -0
- package/dist/argv.d.ts +1 -0
- package/dist/argv.js +8 -0
- package/dist/argv.js.map +1 -0
- package/dist/artifact-reference.d.ts +22 -0
- package/dist/artifact-reference.js +47 -0
- package/dist/artifact-reference.js.map +1 -0
- package/dist/browser-evidence-hygiene.d.ts +7 -0
- package/dist/browser-evidence-hygiene.js +40 -0
- package/dist/browser-evidence-hygiene.js.map +1 -0
- package/dist/claude-agent-sdk.d.ts +94 -0
- package/dist/claude-agent-sdk.js +356 -0
- package/dist/claude-agent-sdk.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +5 -0
- package/dist/cli.js.map +1 -0
- package/dist/codex-app-server-ui.d.ts +39 -0
- package/dist/codex-app-server-ui.js +327 -0
- package/dist/codex-app-server-ui.js.map +1 -0
- package/dist/codex-app-server.d.ts +141 -0
- package/dist/codex-app-server.js +747 -0
- package/dist/codex-app-server.js.map +1 -0
- package/dist/command-failure.d.ts +29 -0
- package/dist/command-failure.js +54 -0
- package/dist/command-failure.js.map +1 -0
- package/dist/computer-use-actor.d.ts +52 -0
- package/dist/computer-use-actor.js +48 -0
- package/dist/computer-use-actor.js.map +1 -0
- package/dist/computer-use.d.ts +232 -0
- package/dist/computer-use.js +615 -0
- package/dist/computer-use.js.map +1 -0
- package/dist/concurrency.d.ts +1 -0
- package/dist/concurrency.js +27 -0
- package/dist/concurrency.js.map +1 -0
- package/dist/concurrent-shared-world-lab.d.ts +115 -0
- package/dist/concurrent-shared-world-lab.js +1092 -0
- package/dist/concurrent-shared-world-lab.js.map +1 -0
- package/dist/core/git-state.d.ts +31 -0
- package/dist/core/git-state.js +142 -0
- package/dist/core/git-state.js.map +1 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/run-primitives.d.ts +66 -0
- package/dist/core/run-primitives.js +120 -0
- package/dist/core/run-primitives.js.map +1 -0
- package/dist/cua-actor-lab.d.ts +620 -0
- package/dist/cua-actor-lab.js +2834 -0
- package/dist/cua-actor-lab.js.map +1 -0
- package/dist/device-presets.d.ts +67 -0
- package/dist/device-presets.js +50 -0
- package/dist/device-presets.js.map +1 -0
- package/dist/e2b-desktop-executor.d.ts +101 -0
- package/dist/e2b-desktop-executor.js +309 -0
- package/dist/e2b-desktop-executor.js.map +1 -0
- package/dist/e2b-desktop-launch.d.ts +144 -0
- package/dist/e2b-desktop-launch.js +59 -0
- package/dist/e2b-desktop-launch.js.map +1 -0
- package/dist/e2b-detached.d.ts +53 -0
- package/dist/e2b-detached.js +130 -0
- package/dist/e2b-detached.js.map +1 -0
- package/dist/e2b-terminal-lab.d.ts +345 -0
- package/dist/e2b-terminal-lab.js +1467 -0
- package/dist/e2b-terminal-lab.js.map +1 -0
- package/dist/env-file.d.ts +14 -0
- package/dist/env-file.js +108 -0
- package/dist/env-file.js.map +1 -0
- package/dist/feedback.d.ts +51 -0
- package/dist/feedback.js +313 -0
- package/dist/feedback.js.map +1 -0
- package/dist/image-evidence.d.ts +2 -0
- package/dist/image-evidence.js +33 -0
- package/dist/image-evidence.js.map +1 -0
- package/dist/index.d.ts +63 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/init-templates.d.ts +12 -0
- package/dist/init-templates.js +369 -0
- package/dist/init-templates.js.map +1 -0
- package/dist/init.d.ts +26 -0
- package/dist/init.js +343 -0
- package/dist/init.js.map +1 -0
- package/dist/lab-app-runner.d.ts +78 -0
- package/dist/lab-app-runner.js +403 -0
- package/dist/lab-app-runner.js.map +1 -0
- package/dist/lab-config.d.ts +578 -0
- package/dist/lab-config.js +1751 -0
- package/dist/lab-config.js.map +1 -0
- package/dist/lab-engine.d.ts +77 -0
- package/dist/lab-engine.js +216 -0
- package/dist/lab-engine.js.map +1 -0
- package/dist/lab-preflight.d.ts +67 -0
- package/dist/lab-preflight.js +385 -0
- package/dist/lab-preflight.js.map +1 -0
- package/dist/labs.d.ts +53 -0
- package/dist/labs.js +176 -0
- package/dist/labs.js.map +1 -0
- package/dist/observer-assets.d.ts +2 -0
- package/dist/observer-assets.js +2630 -0
- package/dist/observer-assets.js.map +1 -0
- package/dist/observer-data.d.ts +63 -0
- package/dist/observer-data.js +145 -0
- package/dist/observer-data.js.map +1 -0
- package/dist/observer-static.d.ts +39 -0
- package/dist/observer-static.js +192 -0
- package/dist/observer-static.js.map +1 -0
- package/dist/observer.d.ts +46 -0
- package/dist/observer.js +353 -0
- package/dist/observer.js.map +1 -0
- package/dist/openai-responses-cu.d.ts +113 -0
- package/dist/openai-responses-cu.js +531 -0
- package/dist/openai-responses-cu.js.map +1 -0
- package/dist/oss-lab.d.ts +52 -0
- package/dist/oss-lab.js +299 -0
- package/dist/oss-lab.js.map +1 -0
- package/dist/oss-meta-lab-scoring.d.ts +15 -0
- package/dist/oss-meta-lab-scoring.js +145 -0
- package/dist/oss-meta-lab-scoring.js.map +1 -0
- package/dist/oss-meta-lab.d.ts +279 -0
- package/dist/oss-meta-lab.js +4889 -0
- package/dist/oss-meta-lab.js.map +1 -0
- package/dist/oss-remote-telemetry.d.ts +77 -0
- package/dist/oss-remote-telemetry.js +403 -0
- package/dist/oss-remote-telemetry.js.map +1 -0
- package/dist/persona.d.ts +35 -0
- package/dist/persona.js +133 -0
- package/dist/persona.js.map +1 -0
- package/dist/pi-agent-core.d.ts +77 -0
- package/dist/pi-agent-core.js +203 -0
- package/dist/pi-agent-core.js.map +1 -0
- package/dist/program.d.ts +54 -0
- package/dist/program.js +2347 -0
- package/dist/program.js.map +1 -0
- package/dist/redaction.d.ts +90 -0
- package/dist/redaction.js +292 -0
- package/dist/redaction.js.map +1 -0
- package/dist/run.d.ts +784 -0
- package/dist/run.js +4555 -0
- package/dist/run.js.map +1 -0
- package/dist/scripted-browser-actor.d.ts +294 -0
- package/dist/scripted-browser-actor.js +1286 -0
- package/dist/scripted-browser-actor.js.map +1 -0
- package/dist/scripted-browser-lab.d.ts +107 -0
- package/dist/scripted-browser-lab.js +738 -0
- package/dist/scripted-browser-lab.js.map +1 -0
- package/dist/shared-world-lab.d.ts +208 -0
- package/dist/shared-world-lab.js +1048 -0
- package/dist/shared-world-lab.js.map +1 -0
- package/dist/source-archive.d.ts +82 -0
- package/dist/source-archive.js +365 -0
- package/dist/source-archive.js.map +1 -0
- package/dist/stop-conditions.d.ts +26 -0
- package/dist/stop-conditions.js +66 -0
- package/dist/stop-conditions.js.map +1 -0
- package/dist/terminal-agent-actor.d.ts +36 -0
- package/dist/terminal-agent-actor.js +23 -0
- package/dist/terminal-agent-actor.js.map +1 -0
- package/docs/architecture/actor-contract.md +431 -0
- package/docs/architecture/github-feedback-loop.md +189 -0
- package/docs/architecture/local-codex-tui-actor.md +213 -0
- package/docs/architecture/observer.md +118 -0
- package/docs/architecture/oss-lab-poc.md +242 -0
- package/docs/architecture/project-layout.md +166 -0
- package/docs/architecture/state-driven-executor.md +203 -0
- package/docs/architecture/terminal-product-lane.md +148 -0
- package/docs/contracts/adapter-fixtures.md +80 -0
- package/docs/contracts/core.md +71 -0
- package/docs/contracts/feedback.md +145 -0
- package/docs/contracts/policy.md +305 -0
- package/docs/contracts/run-bundle.md +358 -0
- package/docs/contracts/schemas.md +984 -0
- package/docs/goals/current.md +409 -0
- package/docs/principles/invariants-and-defaults.md +135 -0
- package/docs/principles/self-driving-harness.md +129 -0
- package/docs/product/open-source-install-experience.md +229 -0
- package/docs/ramp/README.md +200 -0
- package/docs/release/open-source-readiness.md +208 -0
- package/docs/release/public-readiness-standard.md +205 -0
- package/docs/roadmap/world-class-open-source-v0.md +311 -0
- package/package.json +102 -8
- package/skills/humanish/SKILL.md +244 -0
- package/skills/humanish/agents/openai.yaml +7 -0
- 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
|
|
4
|
-
"description": "
|
|
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
|
-
"
|
|
7
|
-
"
|
|
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": "
|
|
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
|
-
"
|
|
13
|
-
|
|
14
|
-
|
|
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 = {};
|