{"id":40698,"library":"ccqa","title":"ccqa","description":"ccqa is a browser test recorder powered by Claude Code and agent-browser that turns YAML test specs into deterministic, replayable vitest scripts without requiring an LLM during test execution. Version 0.6.0, actively developed on GitHub. Key differentiators: leverages existing Claude subscription (no extra API key for tracing), generates vitest-compatible scripts for CI, supports drift analysis via Claude on test failures, and uses agent-browser for browser automation. Requires Node.js 20+.","status":"active","version":"0.6.0","language":"javascript","source_language":"en","source_url":"https://github.com/shibukazu/ccqa","tags":["javascript"],"install":[{"cmd":"npm install ccqa","lang":"bash","label":"npm"},{"cmd":"yarn add ccqa","lang":"bash","label":"yarn"},{"cmd":"pnpm add ccqa","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Peer dependency required for browser automation","package":"agent-browser","optional":false},{"reason":"Peer dependency required for running generated tests","package":"vitest","optional":false}],"imports":[],"quickstart":{"code":"# Write a spec\ncat > .ccqa/features/tasks/test-cases/create-and-complete/spec.yaml << 'EOF'\ntitle: Create a task and mark it complete\nsteps:\n  - instruction: |\n      Open ${APP_URL}/login. Fill in email and password, submit the form.\n    expected: Redirected to /dashboard, user avatar visible in the header\n  - instruction: |\n      Click \"New Task\", fill in the title \"Fix login bug\", set priority to High, save.\n    expected: Task appears in the task list with status \"Open\"\nEOF\n\n# Trace (Claude drives browser)\nnpx ccqa trace tasks/create-and-complete\n\n# Generate test script\nnpx ccqa generate tasks/create-and-complete\n\n# Run deterministically in CI\nnpx ccqa run tasks/create-and-complete\n\n# Run with drift analysis on failure (requires ANTHROPIC_API_KEY or local Claude login)\nexport APP_URL=http://localhost:3000\nnpx ccqa run tasks/create-and-complete --drift --format github","lang":"shell","description":"Shows full workflow: write a spec in YAML, trace browser actions with Claude, generate deterministic test script, run in CI without LLM."},"warnings":[{"fix":"Run `pnpm add -D agent-browser` (or npm/yarn equivalent)","message":"agent-browser is a peer dependency and must be installed separately","severity":"gotcha","affected_versions":">=0.0.0"},{"fix":"Ensure all referenced environment variables (e.g., APP_URL) are set in your shell or .env file","message":"Specs reference URLs via `${ENV_VAR}` that must be set at trace and run time","severity":"gotcha","affected_versions":">=0.0.0"},{"fix":"Upgrade Node.js to version 20 or later","message":"Requires Node.js 20+; older versions will fail","severity":"breaking","affected_versions":">=0.0.0"},{"fix":"Use full model IDs via `--model claude-sonnet-4-20250514` (or current model ID) to avoid breakage","message":"The `--model` flag accepts model names like `sonnet`, `opus`, `haiku` but these are aliases that may change in future versions","severity":"deprecated","affected_versions":">=0.0.0"},{"fix":"Log in via `claude login` locally; set ANTHROPIC_API_KEY in CI environment","message":"Interactive `ccqa trace` requires a local Claude Code login; CI drift analysis additionally needs ANTHROPIC_API_KEY","severity":"gotcha","affected_versions":">=0.0.0"}],"env_vars":null,"search_vec":"'0.6.0':34 '20':76 'activ':35 'agent':14,69 'agent-brows':13,68 'analysi':60 'api':47 'autom':73 'browser':5,15,70,72 'ccqa':1,2 'ci':57 'claud':10,43,62 'code':11 'compat':54 'determinist':22 'develop':36 'differenti':40 'drift':59 'execut':32 'exist':42 'extra':46 'failur':65 'generat':51 'github':38 'javascript':77 'key':39,48 'leverag':41 'llm':29 'node.js':75 'power':8 'record':7 'replay':23 'requir':27,74 'script':25,55 'spec':20 'subscript':44 'support':58 'test':6,19,31,64 'trace':50 'turn':17 'use':67 'version':33 'via':61 'vitest':24,53 'vitest-compat':52 'without':26 'yaml':18","created_at":"2026-06-04T18:48:49.198127+00:00","updated_at":"2026-06-04T18:48:49.198127+00:00","problems":[{"fix":"Run `npx ccqa` or install with `pnpm add -D ccqa` and use `pnpm ccqa`","cause":"ccqa is not installed globally or not in PATH","error":"ccqa: command not found"},{"fix":"Install agent-browser: `pnpm add -D agent-browser`","cause":"Missing peer dependency agent-browser","error":"Error: Cannot find module 'agent-browser'"},{"fix":"Ensure the spec file exists at .ccqa/features/<feature>/test-cases/<spec>/spec.yaml (e.g., for `ccqa trace tasks/create-and-complete` the file must be at .ccqa/features/tasks/test-cases/create-and-complete/spec.yaml)","cause":"The spec path alias doesn't match the filesystem structure","error":"Error: Spec file not found: .ccqa/features/tasks/test-cases/create-and-complete/spec.yaml"},{"fix":"Set the variable before running: `export APP_URL=http://localhost:3000`","cause":"An environment variable referenced in the spec is undefined","error":"Error: ENV_VAR not set: APP_URL"},{"fix":"Use `import` syntax or run in an ESM context (add `\"type\": \"module\"` to package.json)","cause":"ccqa is an ESM-only package, cannot be imported with require()","error":"Error: ESM Only. CJS require() is not supported."}],"ecosystem":"npm","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":null,"cli_version":null,"type":"library","homepage":"https://github.com/shibukazu/ccqa#readme","github":"https://github.com/shibukazu/ccqa","docs":null,"changelog":null,"pypi":null,"npm":"ccqa","openapi_spec":null,"status_page":null,"smithery":null,"categories":["testing"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-06-04","next_check":"2026-09-02","install_tag":null}}