humanish 0.0.1 → 0.15.1
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 +437 -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 +363 -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 +357 -0
- package/dist/codex-app-server-ui.js.map +1 -0
- package/dist/codex-app-server.d.ts +144 -0
- package/dist/codex-app-server.js +754 -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 +1094 -0
- package/dist/concurrent-shared-world-lab.js.map +1 -0
- package/dist/core/git-state.d.ts +33 -0
- package/dist/core/git-state.js +277 -0
- package/dist/core/git-state.js.map +1 -0
- package/dist/core/git-workspace.d.ts +31 -0
- package/dist/core/git-workspace.js +447 -0
- package/dist/core/git-workspace.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 +621 -0
- package/dist/cua-actor-lab.js +2845 -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 +1532 -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 +351 -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 +429 -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 +583 -0
- package/dist/lab-config.js +1789 -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 +382 -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 +306 -0
- package/dist/observer-static.js.map +1 -0
- package/dist/observer.d.ts +46 -0
- package/dist/observer.js +550 -0
- package/dist/observer.js.map +1 -0
- package/dist/openai-responses-cu.d.ts +113 -0
- package/dist/openai-responses-cu.js +545 -0
- package/dist/openai-responses-cu.js.map +1 -0
- package/dist/oss-lab.d.ts +52 -0
- package/dist/oss-lab.js +344 -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 +277 -0
- package/dist/oss-meta-lab.js +4529 -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 +2349 -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-paths.d.ts +56 -0
- package/dist/run-paths.js +340 -0
- package/dist/run-paths.js.map +1 -0
- package/dist/run.d.ts +794 -0
- package/dist/run.js +4844 -0
- package/dist/run.js.map +1 -0
- package/dist/scripted-browser-actor.d.ts +297 -0
- package/dist/scripted-browser-actor.js +1399 -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 +788 -0
- package/dist/scripted-browser-lab.js.map +1 -0
- package/dist/selected-output-paths.d.ts +49 -0
- package/dist/selected-output-paths.js +354 -0
- package/dist/selected-output-paths.js.map +1 -0
- package/dist/shared-world-lab.d.ts +208 -0
- package/dist/shared-world-lab.js +1049 -0
- package/dist/shared-world-lab.js.map +1 -0
- package/dist/source-archive.d.ts +82 -0
- package/dist/source-archive.js +408 -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 +250 -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 +311 -0
- package/docs/contracts/run-bundle.md +358 -0
- package/docs/contracts/schemas.md +984 -0
- package/docs/goals/current.md +428 -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 +237 -0
- package/docs/ramp/README.md +207 -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,129 @@
|
|
|
1
|
+
# Self-Driving Harness Principles
|
|
2
|
+
|
|
3
|
+
Date: 2026-06-01
|
|
4
|
+
|
|
5
|
+
Status: initial repo doctrine for `humanish`.
|
|
6
|
+
|
|
7
|
+
## Thesis
|
|
8
|
+
|
|
9
|
+
`humanish` should be a closed-loop product simulation system, not just a
|
|
10
|
+
CLI that launches agents.
|
|
11
|
+
|
|
12
|
+
The operating loop is:
|
|
13
|
+
|
|
14
|
+
```text
|
|
15
|
+
persona scenario run
|
|
16
|
+
-> durable evidence bundle
|
|
17
|
+
-> review and verification
|
|
18
|
+
-> structured feedback
|
|
19
|
+
-> GitHub issue or project queue
|
|
20
|
+
-> scoped implementation
|
|
21
|
+
-> rerun and compare
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
The hard part is not getting an agent to do something. The hard part is making
|
|
25
|
+
the result verifiable, repeatable, safe to file, and useful to the next
|
|
26
|
+
agent with no chat context.
|
|
27
|
+
|
|
28
|
+
## Public Boundary
|
|
29
|
+
|
|
30
|
+
This repo must be designed as if it will become public.
|
|
31
|
+
|
|
32
|
+
No PII, PHI, secrets, keys, tokens, raw private transcripts, real patient data,
|
|
33
|
+
real customer data, or private product artifacts belong here. Examples,
|
|
34
|
+
fixtures, screenshots, personas, run bundles, issue bodies, and docs must be
|
|
35
|
+
synthetic or redacted.
|
|
36
|
+
|
|
37
|
+
## Principles
|
|
38
|
+
|
|
39
|
+
### 1. Model, Harness, Environment
|
|
40
|
+
|
|
41
|
+
Reliable agentic work is the composition of model, harness, and environment.
|
|
42
|
+
`humanish` owns the harness layer: replay, invariants, observability,
|
|
43
|
+
policy, artifacts, review, and feedback routing.
|
|
44
|
+
|
|
45
|
+
### 2. Verifiability Defines Throughput
|
|
46
|
+
|
|
47
|
+
Autonomy stalls when outcomes cannot be classified as red, yellow, or green.
|
|
48
|
+
Every claim a run makes should point to retrievable evidence: bundle files,
|
|
49
|
+
screenshots, terminal transcripts, state proofs, event streams, review packets,
|
|
50
|
+
or issue links.
|
|
51
|
+
|
|
52
|
+
### 3. Run Bundles Are Source Of Truth
|
|
53
|
+
|
|
54
|
+
The observer is a projection. The GitHub Project is a cockpit. The issue queue
|
|
55
|
+
is a work surface. The run bundle is the canonical evidence record.
|
|
56
|
+
|
|
57
|
+
### 4. Coverage Is The Product
|
|
58
|
+
|
|
59
|
+
Serious adapters need discovery maps and coverage matrices. Hidden
|
|
60
|
+
undercoverage is worse than visible gaps. A partial matrix with named gaps is
|
|
61
|
+
more useful than three green happy paths pretending to prove the whole product.
|
|
62
|
+
|
|
63
|
+
### 5. Product Trial Beats Tracker Truth
|
|
64
|
+
|
|
65
|
+
Tracker fields, issue comments, PR summaries, and author receipts are not
|
|
66
|
+
acceptance. A product claim needs a product trial or a precise explanation of
|
|
67
|
+
why the run is only contract proof.
|
|
68
|
+
|
|
69
|
+
### 6. Staged Autonomy Beats Binary Replacement
|
|
70
|
+
|
|
71
|
+
Authority should progress through stages:
|
|
72
|
+
|
|
73
|
+
```text
|
|
74
|
+
observe -> draft feedback -> draft issue -> draft spec -> draft PR -> steward PR -> release assist
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Each stage requires stricter proof, narrower write scope, and clearer stop
|
|
78
|
+
conditions.
|
|
79
|
+
|
|
80
|
+
### 7. Idempotent Closed Loops Beat Heroic Retries
|
|
81
|
+
|
|
82
|
+
Every run and feedback issue-draft path needs idempotency keys, duplicate
|
|
83
|
+
prevention, explicit terminal states, cleanup proof, and safe re-run behavior.
|
|
84
|
+
Retries without loop closure create queue debt.
|
|
85
|
+
|
|
86
|
+
### 8. Feedback Is A First-Class Artifact
|
|
87
|
+
|
|
88
|
+
Friction found by a persona or agent should not be buried in prose. It should
|
|
89
|
+
be structured, evidence-linked, dedupable, public-safe, and reviewable. For an
|
|
90
|
+
open-source CLI, the default output should be an issue draft and filing
|
|
91
|
+
instructions, not live GitHub mutation.
|
|
92
|
+
|
|
93
|
+
### 9. Product Nouns Belong In Adapters
|
|
94
|
+
|
|
95
|
+
Core owns schema, lifecycle, actors, substrates, evidence streams, history,
|
|
96
|
+
review, verification, redaction, and feedback mechanics. Adapters own product
|
|
97
|
+
routes, personas, app topology, milestones, vocabulary, environment allowlists,
|
|
98
|
+
and product-specific proof.
|
|
99
|
+
|
|
100
|
+
### 10. Credential Boundaries Are Architecture
|
|
101
|
+
|
|
102
|
+
Executor auth, product auth, provider auth, spend policy, network policy, and
|
|
103
|
+
repo/GitHub authority are separate boundaries. A run must name what was
|
|
104
|
+
available and prove that sensitive values were not persisted.
|
|
105
|
+
|
|
106
|
+
### 11. Dry-Run Is Contract Proof
|
|
107
|
+
|
|
108
|
+
Dry-run proves scenario selection, bundle shape, review generation, and CLI
|
|
109
|
+
semantics. It does not prove product behavior. Review output must preserve that
|
|
110
|
+
distinction.
|
|
111
|
+
|
|
112
|
+
### 12. Green Requires Reviewer Acceptance
|
|
113
|
+
|
|
114
|
+
The builder of a harness is not the final judge of the harness. `review` can
|
|
115
|
+
summarize, `verify` can validate contracts, but acceptance requires a reviewer
|
|
116
|
+
or reviewer-like gate that checks coverage, evidence, and product relevance.
|
|
117
|
+
|
|
118
|
+
## Anti-Patterns
|
|
119
|
+
|
|
120
|
+
- Treating the best model as a substitute for harness quality.
|
|
121
|
+
- Using screenshots as vibes without state or transcript evidence.
|
|
122
|
+
- Letting product-specific nouns leak into generic core.
|
|
123
|
+
- Generating GitHub issue drafts from vague summaries without bundle links.
|
|
124
|
+
- Closing issues because a PR exists, not because product proof exists.
|
|
125
|
+
- Giving autonomous agents broad write authority before observe/draft stages
|
|
126
|
+
are reliable.
|
|
127
|
+
- Letting project fields become canonical state.
|
|
128
|
+
- Retrying failed issue submission paths until duplicates appear.
|
|
129
|
+
- Storing private data in examples because it was convenient during extraction.
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# Open-Source Install Experience
|
|
2
|
+
|
|
3
|
+
Date: 2026-06-01
|
|
4
|
+
|
|
5
|
+
Status: product target for the first world-class `humanish` implementation.
|
|
6
|
+
|
|
7
|
+
Safety amendment (2026-07-14): the `0.15.1` package binds managed run and
|
|
8
|
+
output storage to validated physical paths, treats provider IDs persisted in a
|
|
9
|
+
run bundle as evidence rather than cleanup authority, and disables live OSS
|
|
10
|
+
meta-lab execution until repository-derived instructions have an isolated
|
|
11
|
+
credential boundary. The historical product target below remains useful for
|
|
12
|
+
intent and sequencing, but current behavior is defined by the README and
|
|
13
|
+
[`docs/goals/current.md`](../goals/current.md).
|
|
14
|
+
|
|
15
|
+
## Product Promise
|
|
16
|
+
|
|
17
|
+
Drop Humanish into an app and let a coding agent set up realistic persona
|
|
18
|
+
simulations, run them safely, watch them in a polished observer, and turn
|
|
19
|
+
friction into public-safe issue drafts.
|
|
20
|
+
|
|
21
|
+
The first experience should feel like a mature one-command simulation harness,
|
|
22
|
+
but with an open-source-safe package shape:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npm i -D humanish
|
|
26
|
+
npx humanish init
|
|
27
|
+
npm run humanish:doctor
|
|
28
|
+
npm run humanish:watch
|
|
29
|
+
npm run humanish:verify
|
|
30
|
+
npx humanish feedback issue --run latest --repo example/app --format markdown
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Two-Part Distribution
|
|
34
|
+
|
|
35
|
+
### NPM Package
|
|
36
|
+
|
|
37
|
+
The npm package owns executable behavior:
|
|
38
|
+
|
|
39
|
+
- binary: `humanish`;
|
|
40
|
+
- CLI framework: `commander`;
|
|
41
|
+
- commands: `init`, `doctor`, `run`, `watch`, `review`, `verify`,
|
|
42
|
+
`lab`, `feedback`;
|
|
43
|
+
- schemas and validators;
|
|
44
|
+
- synthetic starter templates;
|
|
45
|
+
- observer static assets;
|
|
46
|
+
- artifact and run-bundle utilities;
|
|
47
|
+
- redaction and public issue-draft generation.
|
|
48
|
+
|
|
49
|
+
### Agent Skill
|
|
50
|
+
|
|
51
|
+
The agent skill owns installation guidance and repo adaptation:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
npx skills add danielgwilson/humanish --skill humanish
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Installable repo skill: [`skills/humanish/SKILL.md`](../../skills/humanish/SKILL.md).
|
|
58
|
+
|
|
59
|
+
The skill should teach the user's coding agent how to:
|
|
60
|
+
|
|
61
|
+
- install `humanish`;
|
|
62
|
+
- run `humanish init`;
|
|
63
|
+
- inspect the target app's routes and dev command;
|
|
64
|
+
- create synthetic personas and scenarios;
|
|
65
|
+
- create public-safe `humanish/labs/*.yaml` lab manifests;
|
|
66
|
+
- keep private/local labs under ignored `.humanish/labs/*.yaml` or
|
|
67
|
+
`.humanish/local/labs/*.yaml`;
|
|
68
|
+
- configure local app targets;
|
|
69
|
+
- document E2B and OpenAI env var names without storing values;
|
|
70
|
+
- use `--env-file <path>` for explicit local env hydration without persisting
|
|
71
|
+
values into artifacts;
|
|
72
|
+
- run `doctor`, `watch`, `verify`, and `feedback issue`;
|
|
73
|
+
- avoid PII, PHI, secrets, real customer data, and private artifacts.
|
|
74
|
+
|
|
75
|
+
The skill should not hide critical behavior in chat memory. It should point to
|
|
76
|
+
repo-owned `humanish/` files and package-owned docs.
|
|
77
|
+
|
|
78
|
+
## Project File Formats
|
|
79
|
+
|
|
80
|
+
New projects should get a boring, legible format stack:
|
|
81
|
+
|
|
82
|
+
- `.yaml` for human-authored Humanish source such as personas, scenarios,
|
|
83
|
+
policies, labs, and review vocabulary;
|
|
84
|
+
- `.ts` for executable integration such as `humanish/config.ts` and adapters;
|
|
85
|
+
- `.json` and `.ndjson` for generated run artifacts, Observer data, review
|
|
86
|
+
output, event streams, and synthetic fixtures.
|
|
87
|
+
|
|
88
|
+
Use `.yml` only where an outside ecosystem convention already expects it, for
|
|
89
|
+
example GitHub Actions workflows. Do not scaffold `.yml` for Humanish source and
|
|
90
|
+
do not use TOML unless a future scalar global-config case clearly needs it.
|
|
91
|
+
|
|
92
|
+
## First-Run Principles
|
|
93
|
+
|
|
94
|
+
- No keys required for the first wow moment.
|
|
95
|
+
- No live GitHub mutation.
|
|
96
|
+
- No hosted queues or private infrastructure.
|
|
97
|
+
- No real customer/user/patient data.
|
|
98
|
+
- No generated personas from tickets, logs, transcripts, screenshots, or
|
|
99
|
+
production analytics.
|
|
100
|
+
- Safe dry-run should produce a valid synthetic run bundle and observer view.
|
|
101
|
+
- The user should see what changed in git.
|
|
102
|
+
|
|
103
|
+
## Lab Manifest Shape
|
|
104
|
+
|
|
105
|
+
Labs are the public-safe way to name a reusable simulation run. A starter app
|
|
106
|
+
gets a committed synthetic lab:
|
|
107
|
+
|
|
108
|
+
```yaml
|
|
109
|
+
schema: humanish.lab.v2
|
|
110
|
+
id: first-run
|
|
111
|
+
title: First-run synthetic Observer
|
|
112
|
+
description: Public-safe starter lab that generates a synthetic run bundle and Observer without provider spend.
|
|
113
|
+
subject:
|
|
114
|
+
source: this-repo
|
|
115
|
+
actors:
|
|
116
|
+
- type: synthetic-persona
|
|
117
|
+
count: 4
|
|
118
|
+
scenario:
|
|
119
|
+
mode: dry-run
|
|
120
|
+
defaults:
|
|
121
|
+
open: true
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Resolution order:
|
|
125
|
+
|
|
126
|
+
1. `humanish/labs/<id>.yaml` for committed, reproducible labs.
|
|
127
|
+
2. `.humanish/labs/<id>.yaml` for ignored local labs.
|
|
128
|
+
3. `.humanish/local/labs/<id>.yaml` for ignored machine-specific overlays.
|
|
129
|
+
4. explicit `.yaml` path, for example
|
|
130
|
+
`.humanish/labs/local-dogfood.yaml`.
|
|
131
|
+
|
|
132
|
+
Private repo targets, local env references, and maintainer dogfood variants
|
|
133
|
+
belong in ignored lab manifests and should be invoked with explicit
|
|
134
|
+
`--env-file`; do not make them package defaults.
|
|
135
|
+
|
|
136
|
+
## `humanish init`
|
|
137
|
+
|
|
138
|
+
`humanish init` should:
|
|
139
|
+
|
|
140
|
+
1. Detect package manager and app framework when possible.
|
|
141
|
+
2. Create committed starter files under `humanish/`.
|
|
142
|
+
3. Create ignored runtime state under `.humanish/`.
|
|
143
|
+
4. Add `.humanish/` and secret/local overlays to `.gitignore`.
|
|
144
|
+
5. Patch `package.json` scripts only after showing the intended diff or when
|
|
145
|
+
`--yes` is passed.
|
|
146
|
+
6. Create only synthetic public-safe personas and scenarios.
|
|
147
|
+
7. Write credential references as env var names only.
|
|
148
|
+
8. Run a dry-run verification if dependencies are available.
|
|
149
|
+
|
|
150
|
+
Suggested scripts:
|
|
151
|
+
|
|
152
|
+
```json
|
|
153
|
+
{
|
|
154
|
+
"scripts": {
|
|
155
|
+
"humanish": "humanish",
|
|
156
|
+
"humanish:doctor": "humanish doctor",
|
|
157
|
+
"humanish:run": "humanish run --dry-run",
|
|
158
|
+
"humanish:watch": "humanish watch",
|
|
159
|
+
"humanish:lab:list": "humanish lab list",
|
|
160
|
+
"humanish:watch:ci": "humanish watch --json --no-open",
|
|
161
|
+
"humanish:verify": "humanish verify"
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Command Ladder
|
|
167
|
+
|
|
168
|
+
| Command | Purpose | First version should |
|
|
169
|
+
| --- | --- | --- |
|
|
170
|
+
| `humanish init` | Set up project-owned harness files | Scaffold committed `humanish/`, ignored `.humanish/`, package scripts |
|
|
171
|
+
| `humanish doctor` | Explain readiness | Check config, gitignore, app target, browser, env var names, redaction policy |
|
|
172
|
+
| `humanish run --dry-run` | Prove contract without app/browser/keys | Write synthetic run bundle |
|
|
173
|
+
| `humanish verify` | Validate bundle and public-safety gates | Fail closed on schema/evidence/redaction errors |
|
|
174
|
+
| `humanish review` | Build review packet from evidence | Summarize verdicts without inventing product proof |
|
|
175
|
+
| `humanish watch` | Run sims and watch the observer | Create a fresh four-lane bundle, render Observer, open it, and keep the shell attached |
|
|
176
|
+
| `humanish watch [lab]` | Run a named lab and watch it | Resolve committed or ignored `.yaml` lab manifests, then open/follow Observer |
|
|
177
|
+
| `humanish watch --json --no-open` | Agent/CI proof path | Create the same bundle and Observer artifacts without browser open or attached watch server |
|
|
178
|
+
| `humanish lab list` | Discover available labs | List committed labs and ignored local labs with origin labels |
|
|
179
|
+
| `humanish lab inspect <lab>` | Read a lab manifest | Print the parsed lab config, origin, path, and warnings without executing |
|
|
180
|
+
| `humanish lab preflight <lab>` | Check lab readiness before spend | Validate routing and optionally probe declared targets from a hosted desktop without launching actors |
|
|
181
|
+
| `humanish lab run <lab>` | Run a lab manifest | Human or JSON execution path for synthetic, OSS meta, and smoke labs |
|
|
182
|
+
| `humanish lab run oss` | Maintainer contract example | Render a dry-run Observer-of-Observers contract for selected repo labels; live execution fails closed pending credential isolation |
|
|
183
|
+
| `humanish lab run oss-smoke` | Maintainer smoke example | Shallow clone lightweight GitHub repos, run setup/proof/verify, report, and remove clones |
|
|
184
|
+
| `humanish feedback issue` | Produce public-safe issue draft | Print Markdown or prefilled issue URL, no GitHub API mutation |
|
|
185
|
+
|
|
186
|
+
## Live Capability Ladder
|
|
187
|
+
|
|
188
|
+
Live execution should be staged after the dry-run path is boring:
|
|
189
|
+
|
|
190
|
+
1. Synthetic dry-run bundle.
|
|
191
|
+
2. Local app reachability and browser smoke.
|
|
192
|
+
3. Scripted browser scenario.
|
|
193
|
+
4. Observer over real screenshots/traces.
|
|
194
|
+
5. Computer-use / OpenAI actor.
|
|
195
|
+
6. E2B substrate.
|
|
196
|
+
7. Multi-persona matrix.
|
|
197
|
+
8. Optional maintainer-only issue sync tooling.
|
|
198
|
+
|
|
199
|
+
Do not make E2B, OpenAI, or GitHub credentials part of the first successful
|
|
200
|
+
run.
|
|
201
|
+
|
|
202
|
+
For step 3, app-specific browser scenarios are authored as `.yaml` source under
|
|
203
|
+
`humanish/scenarios/*.yaml`:
|
|
204
|
+
|
|
205
|
+
```yaml
|
|
206
|
+
schema: humanish.scenario.v1
|
|
207
|
+
id: core-browser-flow
|
|
208
|
+
title: Core browser flow
|
|
209
|
+
persona: synthetic-new-user
|
|
210
|
+
goal: Reach the first meaningful product state with synthetic data.
|
|
211
|
+
mode: browser
|
|
212
|
+
browser:
|
|
213
|
+
startPath: /
|
|
214
|
+
steps:
|
|
215
|
+
- id: open-home
|
|
216
|
+
label: Open the app
|
|
217
|
+
action: goto
|
|
218
|
+
path: /
|
|
219
|
+
expect:
|
|
220
|
+
text: "Get started"
|
|
221
|
+
- id: submit-primary-action
|
|
222
|
+
label: Submit the primary action
|
|
223
|
+
action: click
|
|
224
|
+
selector: "button[type='submit']"
|
|
225
|
+
expect:
|
|
226
|
+
stateChanged: true
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
`humanish run --app-url <loopback-url>` uses the first executable browser
|
|
230
|
+
scenario it finds. If no executable browser steps exist, Humanish falls back to
|
|
231
|
+
the built-in two-step browser persona proof and says so in warnings/review.
|
|
232
|
+
|
|
233
|
+
Live E2B desktop labs are an optional advanced path. Target projects that need
|
|
234
|
+
them should install `@e2b/desktop` explicitly instead of receiving that
|
|
235
|
+
substrate as part of the default Humanish package install. When a GitHub token is
|
|
236
|
+
present, repo labels are redacted in durable artifacts by default; live stream
|
|
237
|
+
auth URLs are used only by the attached watch server and are not persisted.
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# Humanish Ramp
|
|
2
|
+
|
|
3
|
+
Status: public-safe contributor and agent ramp.
|
|
4
|
+
|
|
5
|
+
Current safety state: `0.15.1` (2026-07-14). Managed run and output paths bind
|
|
6
|
+
to validated physical filesystem identities. Stored provider IDs are evidence,
|
|
7
|
+
not cleanup authority. The bundled OSS meta-lab is dry-run only until
|
|
8
|
+
repository-derived instructions have an isolated credential boundary.
|
|
9
|
+
|
|
10
|
+
Use this page when you are starting cold on `humanish`. It is meant to be
|
|
11
|
+
useful without chat history, private notes, local machine paths, or maintainer
|
|
12
|
+
context.
|
|
13
|
+
|
|
14
|
+
## First Read
|
|
15
|
+
|
|
16
|
+
Read these in order:
|
|
17
|
+
|
|
18
|
+
1. [`AGENTS.md`](../../AGENTS.md) for public boundary and engineering rules.
|
|
19
|
+
2. [`docs/principles/invariants-and-defaults.md`](../principles/invariants-and-defaults.md) — the constitution: which rules are invariants and which are overridable defaults.
|
|
20
|
+
3. [`README.md`](../../README.md) for install, commands, and package shape.
|
|
21
|
+
4. [`docs/goals/current.md`](../goals/current.md) for the active product goal.
|
|
22
|
+
5. [`docs/goals/proof-roadmap/goal.md`](https://github.com/danielgwilson/humanish/blob/main/docs/goals/proof-roadmap/goal.md) for the ratified proof architecture (repo-only; not shipped in the npm package, hence the absolute link).
|
|
23
|
+
6. [`docs/product/open-source-install-experience.md`](../product/open-source-install-experience.md) for first-run UX.
|
|
24
|
+
7. [`docs/roadmap/world-class-open-source-v0.md`](../roadmap/world-class-open-source-v0.md) for staged delivery history (historical; see its status banner).
|
|
25
|
+
8. [`docs/architecture/observer.md`](../architecture/observer.md) for Observer architecture.
|
|
26
|
+
9. [`docs/contracts/run-bundle.md`](../contracts/run-bundle.md) and [`docs/contracts/policy.md`](../contracts/policy.md) for proof contracts.
|
|
27
|
+
10. [`docs/release/public-readiness-standard.md`](../release/public-readiness-standard.md) before deciding what must be scrubbed.
|
|
28
|
+
11. [`docs/release/open-source-readiness.md`](../release/open-source-readiness.md) before touching public packaging or repository visibility.
|
|
29
|
+
|
|
30
|
+
## Mental Model
|
|
31
|
+
|
|
32
|
+
Humanish is a persona simulation harness for apps, CLIs, and agent-facing product
|
|
33
|
+
flows.
|
|
34
|
+
|
|
35
|
+
- `humanish/` is committed source: personas, scenarios, policy, adapters, and
|
|
36
|
+
lab manifests.
|
|
37
|
+
- `.humanish/` is ignored runtime state: runs, Observer output, transcripts,
|
|
38
|
+
reviews, temporary clones, and local evidence.
|
|
39
|
+
- Humanish source uses `.yaml` for human-authored simulation intent, `.ts` for
|
|
40
|
+
executable integration, and JSON/NDJSON for generated artifacts.
|
|
41
|
+
- A run bundle is the source of truth.
|
|
42
|
+
- The Observer is the projection that makes that truth reviewable.
|
|
43
|
+
- Feedback commands turn verified evidence into public-safe issue drafts.
|
|
44
|
+
|
|
45
|
+
If a change does not improve one of those loops, it probably belongs elsewhere.
|
|
46
|
+
|
|
47
|
+
## Current State
|
|
48
|
+
|
|
49
|
+
Humanish has a working public package shape and a safe first-run path:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
pnpm install --frozen-lockfile
|
|
53
|
+
pnpm release:check
|
|
54
|
+
pnpm humanish -- watch --json --no-open
|
|
55
|
+
pnpm humanish -- verify --run latest --json
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Implemented:
|
|
59
|
+
|
|
60
|
+
- `commander` CLI with stable command help;
|
|
61
|
+
- `init`, `doctor`, `run`, `watch`, `verify`, `review`, `runs`, and `feedback`;
|
|
62
|
+
- synthetic run bundles;
|
|
63
|
+
- public-safety verification with machine-readable `shareSafety.status`
|
|
64
|
+
(`share_ready`, `local_only`, or `blocked`);
|
|
65
|
+
- mission-control Observer over UI, CLI, TUI, and Codex UI stream contracts;
|
|
66
|
+
- public-safe feedback issue drafts without GitHub API mutation, gated on
|
|
67
|
+
`share_ready` evidence;
|
|
68
|
+
- skills.sh-compatible agent skill;
|
|
69
|
+
- first-class lab manifest resolution through `humanish/labs/*.yaml` and
|
|
70
|
+
ignored `.humanish/labs/*.yaml` overlays — `humanish.lab.v2` compositions
|
|
71
|
+
(`src/lab-config.ts`), one engine, no hardcoded lab kinds;
|
|
72
|
+
- a pluggable actor registry with four registered actors
|
|
73
|
+
(`src/actor-registry.ts`); on the computer-use routes `actors[0].type` is a
|
|
74
|
+
real dispatch key;
|
|
75
|
+
- a computer-use route and clone subject provider: `subject.source: app-url`
|
|
76
|
+
drives a lab-owner loopback app in a hosted desktop, and `subject.source:
|
|
77
|
+
clone` + `serve` clones, installs, and serves a real app in-sandbox from
|
|
78
|
+
config before the actor drives it (`src/cua-actor-lab.ts`);
|
|
79
|
+
- containment checks for managed run storage, Observer and feedback reads,
|
|
80
|
+
actor artifacts, lab discovery, Git metadata, and source archives;
|
|
81
|
+
- an OSS meta-lab dry-run contract and a separate disposable public-repo OSS
|
|
82
|
+
smoke harness;
|
|
83
|
+
- cleanup inspection receipts that do not treat mutable run-bundle IDs as
|
|
84
|
+
provider-mutation authority.
|
|
85
|
+
|
|
86
|
+
Still not good enough:
|
|
87
|
+
|
|
88
|
+
- live `--app-url` browser proof now supports app-specific executable
|
|
89
|
+
`browser.steps` in `humanish/scenarios/*.yaml`, with headed provider-backed
|
|
90
|
+
public proof against two app/tool targets;
|
|
91
|
+
- live PTY and Codex UI lanes need stronger completion health;
|
|
92
|
+
- live OSS meta-lab execution remains disabled until repository-derived
|
|
93
|
+
instructions have an isolated credential boundary; historical headed-lane
|
|
94
|
+
evidence does not make the current entrypoint available;
|
|
95
|
+
- Observer evidence has real screenshots/traces for browser app proof; richer
|
|
96
|
+
multi-step product journeys and broader multi-persona matrices remain the next
|
|
97
|
+
gap.
|
|
98
|
+
|
|
99
|
+
## First Commands
|
|
100
|
+
|
|
101
|
+
From a clean checkout:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
git status --short --branch
|
|
105
|
+
pnpm install --frozen-lockfile
|
|
106
|
+
pnpm release:check
|
|
107
|
+
pnpm humanish -- watch --json --no-open
|
|
108
|
+
pnpm humanish -- runs --json
|
|
109
|
+
pnpm humanish -- lab list
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
For local product feel:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
pnpm humanish -- watch
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
For public OSS dogfood without credentials:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
pnpm humanish -- lab run oss --dry-run --json --no-open
|
|
122
|
+
pnpm humanish -- lab run oss-smoke --limit 1 --json
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
For private/local dogfood, author an ignored lab manifest under
|
|
126
|
+
`.humanish/labs/` or `.humanish/local/labs/`, then invoke it explicitly with an
|
|
127
|
+
ignored env file:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
pnpm humanish -- watch .humanish/labs/local-dogfood.yaml --env-file .humanish/local/provider.env
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## How To Pick Work
|
|
134
|
+
|
|
135
|
+
Start from [`docs/goals/current.md`](../goals/current.md).
|
|
136
|
+
|
|
137
|
+
Prefer work that makes Humanish more believable to a new maintainer:
|
|
138
|
+
|
|
139
|
+
- a command becomes easier to run;
|
|
140
|
+
- a run bundle becomes more truthful;
|
|
141
|
+
- Observer evidence becomes more inspectable;
|
|
142
|
+
- verification catches a real bad state;
|
|
143
|
+
- feedback drafts become more actionable;
|
|
144
|
+
- public-safety gates catch a class of leak or stale residue.
|
|
145
|
+
|
|
146
|
+
If no GitHub issue exists for substantial work, draft one with the repo issue
|
|
147
|
+
template before building. Use labels to communicate authority, area, risk, and
|
|
148
|
+
required proof.
|
|
149
|
+
|
|
150
|
+
## Quality Bar
|
|
151
|
+
|
|
152
|
+
Do not close a change on narrative alone.
|
|
153
|
+
|
|
154
|
+
Useful proof includes:
|
|
155
|
+
|
|
156
|
+
- `pnpm release:check`;
|
|
157
|
+
- focused unit or contract tests;
|
|
158
|
+
- a generated run bundle under ignored `.humanish/`;
|
|
159
|
+
- Observer screenshots or health output;
|
|
160
|
+
- `humanish verify` results;
|
|
161
|
+
- public-surface scan output;
|
|
162
|
+
- fresh clone checks for packaging or release work.
|
|
163
|
+
|
|
164
|
+
A green subset is not the same thing as complete coverage. If something is not
|
|
165
|
+
covered, name it as a gap.
|
|
166
|
+
|
|
167
|
+
## Public Boundary
|
|
168
|
+
|
|
169
|
+
Assume this repository is public even when local or remote visibility says it is
|
|
170
|
+
private.
|
|
171
|
+
|
|
172
|
+
Never commit or paste:
|
|
173
|
+
|
|
174
|
+
- PII or PHI;
|
|
175
|
+
- secrets, keys, tokens, cookies, or raw env files;
|
|
176
|
+
- raw private transcripts;
|
|
177
|
+
- private screenshots;
|
|
178
|
+
- private customer or patient data;
|
|
179
|
+
- local machine paths;
|
|
180
|
+
- private upstream code or operational details.
|
|
181
|
+
|
|
182
|
+
Use synthetic examples, redacted evidence, and env var names without values.
|
|
183
|
+
|
|
184
|
+
## Embarrassment Filter
|
|
185
|
+
|
|
186
|
+
Before committing, ask:
|
|
187
|
+
|
|
188
|
+
- Would this make sense to someone who found the repo through npm?
|
|
189
|
+
- Would I be comfortable with this file quoted in a public issue?
|
|
190
|
+
- Does this depend on private chat memory?
|
|
191
|
+
- Does it mention removed docs, private machine paths, or internal-only names?
|
|
192
|
+
- Does it claim product proof when it only proves a contract?
|
|
193
|
+
|
|
194
|
+
If the answer is uncomfortable, rewrite it, synthesize it, or keep it out of the
|
|
195
|
+
repo.
|
|
196
|
+
|
|
197
|
+
## Hand-Off Format
|
|
198
|
+
|
|
199
|
+
End substantial work with:
|
|
200
|
+
|
|
201
|
+
- what changed;
|
|
202
|
+
- what proof passed;
|
|
203
|
+
- what remains uncertain;
|
|
204
|
+
- the next best issue or command.
|
|
205
|
+
|
|
206
|
+
Future agents should be able to continue from the repo, not from the previous
|
|
207
|
+
chat transcript.
|