Simulate your users.
Auto-Jobs is a CLI-first toolkit for simulated user testing and automated customer development. You describe your product through a JTBD map, generate virtual users grounded in that context, run structured interviews, and score a target site against the jobs and outcomes you care about.
- Initializes a product-agnostic project scaffold with JTBD, interview, and test config
- Generates virtual personas from your actors, jobs, and desired outcomes
- Runs deterministic simulated interviews and writes markdown reports
- Runs browser-based simulated user tests with Playwright
- Can attach to an existing Chrome session via CDP for Chrome DevTools MCP-style control
- Captures screenshots during test runs and includes them in reports
- Uses
codexorclaudeas the test harness for planning and visual analysis - Supports single-harness or dual-harness consensus analysis for browser decisions and vision summaries
- Tracks explicit actor / planner / reviewer subagent provenance for each simulated run
- Supports scripted browser setup and journey steps for login, form fill, upload, keyboard, and assertion flows
- Falls back gracefully to deterministic heuristics when a harness is unavailable or times out
- Tracks score history over time
- Generates and serves a local single-file dashboard
The current MVP is strongest at:
- JTBD scaffolding
- Persona generation
- Interview synthesis
- Browser-based site inspection and scoring
- Scripted authenticated flows and richer form interactions
- Harness-assisted screenshot analysis with deterministic fallback
- Codex / Claude harness switching
- Explicit simulated subagent metadata
- Local reports and dashboard views
Not built yet:
- Slack or webhook notifications
Requires Node.js 20+.
npm installRun the CLI directly:
node cli/index.js --helpInitialize a project:
node cli/index.js init --yes --force \
--name "My Product" \
--description "A tool for fast-moving teams" \
--url "https://example.com" \
--harness codex \
--secondary-harness claude \
--orchestration single \
--actors "Primary User,Team Lead" \
--stages "Discover,Set Up,Use"Generate personas:
node cli/index.js generate-personas --count 4 --archetype all --vary tech_comfort,patienceRun interviews:
node cli/index.js interviewRun a scored test against a live URL:
node cli/index.js test --url https://example.comRun a Playwright test with a specific harness:
node cli/index.js test \
--runner playwright-agent \
--harness codex \
--url https://example.comRun with Claude instead:
node cli/index.js test \
--runner playwright-agent \
--harness claude \
--url https://example.comRun with consensus orchestration:
node cli/index.js test \
--runner playwright-agent \
--harness codex \
--secondary-harness claude \
--orchestration consensus \
--url https://example.comAttach to an existing Chrome session:
node cli/index.js test \
--runner chrome-devtools-agent \
--cdp-url http://127.0.0.1:9222 \
--harness codex \
--url https://example.comView reports and score history:
node cli/index.js report
node cli/index.js score --historyBuild or serve the dashboard:
node cli/index.js dashboard --build-only
node cli/index.js dashboard --port 4040Creates:
config/project.yamlconfig/jtbd.yamlconfig/interviews.yamlconfig/test-scenarios.yamlconfig/personas.yamlscores/history.json
Generates personas from the JTBD map and appends them to config/personas.yaml.
Runs deterministic simulated interviews for selected personas and writes a run report under runs/.
Opens a real browser session, follows the configured scenario path, captures screenshots, scores the experience, writes a test report, and appends score history.
Useful flags:
--url <url>--scenario <scenarioId>--persona <personaId>--runner <runner>--cdp-url <url>--harness <harness>--secondary-harness <harness>--orchestration <mode>--subagents--subagent-execution <mode>--max-reviewers <count>--headed--ci--threshold <score>--exit-code
Shows latest scores, history, comparisons, and CSV export.
Lists runs, opens the latest report path, and compares run manifests.
Builds a single-file dashboard from local config and run history, then optionally serves it.
auto-jobs/
├── cli/
├── config/
├── dashboard/
├── runs/
├── scores/
├── templates/
└── SPEC.md
Typical generated files:
runs/YYYY-MM-DD-HHmm-interview/report.mdruns/YYYY-MM-DD-HHmm-test/report.mdruns/YYYY-MM-DD-HHmm-test/scores.jsonruns/YYYY-MM-DD-HHmm-test/screenshots/...scores/history.jsondashboard/index.html
Authenticated and form-heavy journeys can be declared directly in config/test-scenarios.yaml:
scenarios:
- id: signed-in-dashboard
name: Reach the live dashboard
entry_url: /login
target_job: merchant_collect_cash
setup_steps:
- action: fill
label: Email address
value: demo@example.com
- action: fill
label: Password
value: demodemo
- action: click
role: button
name: Sign in
journey_steps:
- action: assert
url_includes: /dashboard
- action: click
text: Invoices
- action: assert
text: All InvoicesSupported step actions:
gotoclickfillselectuploadpresswaitassertcheckuncheckhover
Harnesses are configured in config/project.yaml:
ai:
harness:
primary: codex
secondary: claude
orchestration: single
timeout_ms: 20000
subagents:
enabled: true
execution: sequential
max_reviewers: 2
browser:
runner: playwright-agent
headless: true
max_steps: 4
cdp_url: http://127.0.0.1:9222
vision:
enabled: true
max_snapshots: 1You can also set these at project creation time:
node cli/index.js init --yes \
--harness claude \
--secondary-harness codex \
--orchestration consensus \
--runner playwright-agentSupported harnesses:
codexclaude
Supported orchestration modes:
singleconsensus
Supported browser runners:
playwright-agentchrome-devtools-agentdeterministic-http
Scenarios can define setup_steps for authentication or environment prep, and journey_steps for deterministic rich flows before the exploratory agent takes over.
Supported actions:
gotoclickfillselectuploadpressassertwaitcheckuncheckhover
Test runs are scored across these dimensions:
job_completiontime_to_valuefindabilitycomprehensionerror_recoverysatisfactionaccessibilityperformancetrustoutcome_alignment
The current scorer blends:
- browser navigation evidence
- page structure and content heuristics
- screenshot capture
- optional harness-based visual analysis
- persona trait adjustments
When a harness is slow or unavailable, the browser agent falls back to deterministic heuristics so runs still complete.
Auto-Jobs is designed to stay:
- CLI-first
- local-file based
- framework-light
- JTBD-grounded
- easy to inspect and hack on
- Source of truth product/spec context lives in
SPEC.md - Config is YAML
- Reports are Markdown
- Scores and history are JSON
- Dashboard pages are single-file HTML with no frontend build step
This repo is an active MVP. The core local loop works today:
- define product context
- generate personas
- run interviews
- run browser-based scored tests with Codex or Claude as the harness
- inspect reports and dashboard