Use a local coding agent
Run a synthetic participant through your signed-in Codex or Claude Code, with explicit usage and credential boundaries.
Finish the installation first, including the @e2b/desktop peer.
A live study normally needs a model provider API key. If you already have a coding
agent signed in (Codex on a ChatGPT plan, Claude Code on a Max plan), humanish
can use it as the participant's brain instead, and then the only credential it
needs is E2B_API_KEY.
npx humanish doctorReplace the actors block in your own-app lab with this fragment.
Keep a finite execution.timeoutMs; API-model dollar caps do not bound your
subscription usage. Review those caps when changing providers.
actors:
- type: local-agent # instead of openai-computer-use
localAgent: codex # use claude for Claude Code
persona: synthetic-new-user
mission: >-
Try the app as a newcomer. Complete its primary task, then report what happened.localAgent chooses the installed CLI (codex is the default); model is a
separate optional model selection passed to that CLI. Before launching a desktop, Humanish checks that the chosen CLI is installed
and its expected credential file is present; that is not a fresh authentication test.
Where execution happens
Humanish's local-agent discovery checks credential-file existence without reading its contents. The authenticated coding CLI still runs on your host and uses its own sign-in state.
Humanish starts it in a scratch directory with read-only restrictions for Codex
or --allowedTools Read for Claude Code, and supplies a screenshot for each
turn. The returned desktop actions execute in E2B. The local CLI remains a host
process under those configured restrictions; they are not a separate sandbox
for everything the CLI can access.
Usage and limitations
- It is not free. Subscription usage consumes your own plan. Runs driven this
way can have
estimatedCostUsd: nullbecause token usage or a matching model rate is unavailable. Claude Code sessions can report token counts; those counts are not a subscription invoice. Inspect the recorded model and missing-cost reason instead of treating an unpriced run as$0. Rate limits on those plans are built for interactive coding; humanish fails closed with the CLI's own message and does not retry into them. - It is slower. Launching and communicating with a local CLI adds latency. Give the lane
enough
execution.timeoutMsfor the task and inspect elapsed time in its evidence. - The evidence says which brain ran it. The trace records
ids.model: "codex app-server (local, operator-authenticated)"or"claude (local, operator-authenticated, one session per run)", so a local-agent run is never silently compared against an API one. - Both agents keep one conversation for the whole run. Codex through an
app-server thread, Claude Code through one
claude -pstream-json session. A participant that starts every turn cold cannot remember trying the menu and tries it again; measured on one lab, that was 188 actions over 90 turns and no finish against 21 actions over 8 turns.HUMANISH_LOCAL_AGENT_ONE_SHOT=1keeps the cold-start path for the Claude agent as a measurement switch, so "remembers" can be compared against "does not" on your own lab; the trace'sids.modelsays which ran.
Use the budget guide to distinguish model estimates, plan usage, and desktop costs.