Budgets and privacy
Control study spend, understand where credentials live, and decide what evidence is safe to share.
Humanish is an MIT-licensed CLI. Live studies use your provider accounts; the hosted desktops and model calls have their own costs.
Set a study budget
For the computer-use route, declare both the study budget and a per-participant backstop:
execution:
target: e2b-desktop
timeoutMs: 600000
caps:
maxTotalUsd: 4
maxUsd: 2maxTotalUsdtracks estimated model spend across the study.maxUsdapplies to each participant. Without a study cap, four participants at$2each have separate thresholds totaling$8; actual spend can exceed that sum.- Both thresholds are checked after model responses report usage. They do not reserve the cost of the next request. An in-flight model call and concurrent participants can cross a threshold before stopping. They are not hard provider billing limits.
- E2B desktop time, app provisioning, and any services used by your target app are additional. Desktop estimates use dated assumptions; your provider bill is authoritative.
- A model without a known rate cannot satisfy a fail-closed computer-use cap, so the run is refused rather than treated as free.
The included try-live lab uses one participant and maxUsd: 2. It is a starting point for learning the product, not a recommended budget for every task.
npx humanish stats --lab try-live --jsonInspect the run's estimated model and desktop costs, rates, and missing-usage fields. An unknown amount means unknown, never zero. A budget_reached computer-use session is incomplete; reaching a threshold does not establish task completion.
After humanish init, use the keyless first-run path or an explicit lab dry run for a preview that makes no provider calls:
npx humanish run first-run
npx humanish lab run try-live --dry-runHow cost estimates work
Computer-use bundles carry a per-participant model estimate and an aggregate E2B compute estimate. Model estimates multiply recorded token usage by a dated rate table. On the independent computer-use route, each desktop records its observed CPU and memory and a host-measured span from acquired handle to cleanup. Different template sizes are priced separately. Every amount is advisory, not an invoice.
The rate table
records its date, source, and whether a rate is a placeholder. Runtime desktop
estimates use the allocation's resource readback; missing metadata stays unpriced.
The legacy desktop helper uses a labeled 8-vCPU/8-GiB planning assumption, which
is not a provider spending ceiling or a measurement of your template. Inspect
those fields alongside the amount.
An unknown model rate or missing token usage produces estimatedCostUsd: null
with a reason; it is never silently counted as zero. Previews invent no spend.
Where the model has separate cache or long-context rates, per-request usage lets the estimator apply them. Missing usage limits what can be priced; a complete-looking total is not proof that every provider charge was observed.
Desktop estimates exclude allocation/startup time before Humanish acquired the handle, plan fees, credits, and negotiated enterprise prices. A desktop kept for debugging or with unconfirmed cleanup adds an unknown remaining-lifetime line, so its total is marked incomplete. Shared-world, scripted-browser, and terminal routes do not yet emit these per-desktop compute estimates.
Choose a model
The maxOutputTokens control below requires Humanish 0.83.0 or later.
For first-party OpenAI computer-use studies, optional actors[0].maxOutputTokens
sets a positive integer limit on each response's output, including reasoning
tokens. It applies to every participant, continuation and retry. A closing
report uses the smaller of this value and its existing 1024-token limit. The
effective setting is recorded in the actor's modelSettings; omitting it keeps
the provider's normal output behavior.
A small value can end a session before it produces visible text. An explicit
provider token-limit response is recorded as budget_reached / incomplete;
its partial output does not establish task completion. This setting does not
bound input/context tokens, total requests, cumulative spend or desktop time.
Terminal, local-agent, scripted, custom-provider/session routes and per-lane
overrides are rejected when they declare this unsupported control.
The default computer-use model is gpt-5.6-sol. Set actors[0].model in the lab
to pin another supported model. The checked-in rate table also prices models
such as gpt-5.6-terra, gpt-5.6-luna, and gpt-5.5; consult the table in your
installed version instead of assuming a newly available model is priced.
A declared computer-use cap (maxUsd or maxTotalUsd) on an unpriced model is
refused at preflight with HUMANISH_CUA_LAB_UNPRICED_CAP. This checks whether a
rate is available; it does not prepay or reserve the next request. An absent cap
is uncapped. A zero threshold can still allow a paid model request before its
reported usage triggers the stop, so maxUsd: 0 is not a no-provider-call mode.
Desktop provisioning can also incur charges.
The terminal route uses scenario.caps.maxUsd for its separate cost-ledger and
product-spend rules; it does not use these computer-use model thresholds. The
computer-use route uses execution.caps; scenario.caps.maxTotalUsd is not a
terminal study budget. Check route warnings before relying on a field.
Store credentials
npx humanish keys set e2b
npx humanish keys set openai
npx humanish keys list
npx humanish doctorThe hidden prompts write keys to the Humanish user store with mode 0600. keys list prints names only. Environment variables work too: E2B_API_KEY and OPENAI_API_KEY for the default live path. An explicit ignored env file can be passed through --env-file on commands that support it.
Keep env files and credentials out of version control. Humanish records provisioned variable names, not their values, and scrubs known secret values from persisted text. The computer-use model's API key stays on the host; the desktop receives actions, not that key.
Use a signed-in coding agent
The computer-use route can use a locally signed-in Codex or Claude Code as the participant's model by setting actors[0].type: local-agent. humanish doctor reports installed and signed-in local agents.
That uses your existing plan and its limits. It is slower than a direct model API call, and model usage can be unpriced in the evidence. E2B still needs its own key and still bills for desktops. Do not carry a priced API-model cap over and assume it bounds subscription usage.
Read the local-agent setup and limitations before choosing this route.
Review evidence before sharing
Run evidence lives under gitignored .humanish/. No feedback command publishes it for you. Live screenshots are full fidelity by default and can contain anything the app displayed.
Use synthetic accounts and data. Keep private targets and local experiments in ignored lab files. Before sharing an artifact, run verify and review the actual content, including pixels.
verify detects secret and path patterns. Free-form personal or sensitive information is not fully detected. A share_ready grade makes a bundle eligible for feedback; it does not remove the need for human review.
For a study intended to produce share-as-is screenshots, policies.redactScreenshots: true blurs persisted frames at capture. That trades visual detail for safer evidence and is not a universal sensitive-data detector. See the public-safety boundary.
Recover after an interruption
After a crash, inspect the interrupted run and its resource receipt:
npx humanish runs
npx humanish cleanup --run latest --jsonOnce you have identified the interrupted run, reclaim its sandboxes:
npx humanish reclaim --run YOUR_RUN_ID --jsonreclaim immediately attempts to stop the sandboxes recorded for that run. reclaim uses journaled exact IDs and needs E2B_API_KEY; it does not sweep unrelated resources in your provider account. See reclaim for the full flags.
humanish cleanup writes an inspection receipt. It does not itself authorize provider-resource deletion. Check your provider console if cleanup cannot be confirmed.
Choose telemetry
Humanish collects anonymous command usage by default. It does not send labs, subjects, personas, paths, or evidence.
npx humanish telemetry status
npx humanish telemetry disableDO_NOT_TRACK=1 also disables telemetry. The telemetry document describes the collected fields.
Keyboard rename worked after a local TodoMVC patch
Twelve synthetic sessions tested an Edit control against TodoMVC's original double-click workflow, with interrupted attempts retained.
Lab manifest reference
Choose a subject route, keep private labs local, and understand scripted browser and maintainer manifests.