{"_id":"testerarmy","_rev":"15-9da74416b99293e8a7f99e188ed07b3e","name":"testerarmy","dist-tags":{"latest":"0.3.5"},"versions":{"0.3.0":{"name":"testerarmy","version":"0.3.0","keywords":["testing","qa","ai","playwright","automation","cli"],"author":{"name":"Tester Army","email":"hello@tester.army"},"license":"MIT","_id":"testerarmy@0.3.0","maintainers":[{"name":"okwasniewski","email":"oskar@okwasniewski.com"}],"homepage":"https://tester.army","bugs":{"url":"https://github.com/tester-army/tester-army/issues"},"bin":{"ta":"dist/cli.js","testerarmy":"dist/cli.js"},"dist":{"shasum":"a7d21ed521066f5816ea6f0ae2bacadab1a40fa8","tarball":"https://registry.npmjs.org/testerarmy/-/testerarmy-0.3.0.tgz","fileCount":3,"integrity":"sha512-nhrXg082yPF1Bf6+BGobngbIvESYdn26T/8NvSjsFQMFk8qIPAXogkXIrk5zVoq8GVwdLdLmtmMkDJCQZpyeXg==","signatures":[{"sig":"MEQCIA8G+kZGH5lu6xWzmCp8feILvE5t5K1hhFSN4o5AwCdBAiAZ36NZwkBedPX9WQN/pusYgQ11FoSgNW/vTJXlOVxEQg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1002591},"type":"module","scripts":{"lint":"tsc --noEmit","build":"tsup && tsx scripts/obfuscate.ts","release":"release-it","typecheck":"tsc --noEmit"},"_npmUser":{"name":"okwasniewski","email":"oskar@okwasniewski.com"},"repository":{"url":"git+https://github.com/tester-army/tester-army.git","type":"git"},"_npmVersion":"11.6.2","description":"CLI for AI-powered QA testing - https://tester.army","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ai":"^6.0.0","table":"^6.9.0","commander":"^14.0.3","playwright":"1.59.0-alpha-1771104257000","@clack/prompts":"1.0.0","@ai-sdk/gateway":"^3.0.32","@playwright/mcp":"^0.0.68"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.0","release-it":"19.2.4","typescript":"^5.8.3","@types/node":"^22.15.18","js-confuser":"2.0.0","@testerarmy/agent":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/testerarmy_0.3.0_1773069581115_0.38973986024285456","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"testerarmy","version":"0.3.1","keywords":["testing","qa","ai","playwright","automation","cli"],"author":{"name":"Tester Army","email":"hello@tester.army"},"license":"MIT","_id":"testerarmy@0.3.1","maintainers":[{"name":"okwasniewski","email":"oskar@okwasniewski.com"}],"homepage":"https://tester.army","bugs":{"url":"https://github.com/tester-army/tester-army/issues"},"bin":{"ta":"dist/cli.js","testerarmy":"dist/cli.js"},"dist":{"shasum":"36619ce961f6876f5d4fbad8d1eb9b722e33bb97","tarball":"https://registry.npmjs.org/testerarmy/-/testerarmy-0.3.1.tgz","fileCount":3,"integrity":"sha512-naQupQ78ZA2F4341GihaQcaf27CGUh2Tnuy6OqenTFhSJzJBgKUJvsG3u5dttekliUPKrqpmntTvEnJr70Ru1A==","signatures":[{"sig":"MEUCIFCVKhW4Vvw8SqykDyqZdfvp+ge51NImW7cqWXEA0oBeAiEArWFSg5UhZwGDUX5WSBf1j+LzJhtpOYq40kvs49PtaTs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1022842},"type":"module","scripts":{"lint":"tsc --noEmit","build":"tsup && tsx scripts/obfuscate.ts","release":"release-it","typecheck":"tsc --noEmit"},"_npmUser":{"name":"okwasniewski","email":"oskar@okwasniewski.com"},"repository":{"url":"git+https://github.com/tester-army/tester-army.git","type":"git"},"_npmVersion":"11.6.2","description":"CLI for AI-powered QA testing - https://tester.army","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ai":"^6.0.0","table":"^6.9.0","commander":"^14.0.3","playwright":"1.59.0-alpha-1771104257000","@clack/prompts":"1.0.0","@ai-sdk/gateway":"^3.0.32","@playwright/mcp":"^0.0.68"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.0","release-it":"19.2.4","typescript":"^5.8.3","@types/node":"^22.15.18","js-confuser":"2.0.0","@testerarmy/agent":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/testerarmy_0.3.1_1773146900363_0.7361895266550524","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"testerarmy","version":"0.3.2","keywords":["testing","qa","ai","playwright","automation","cli"],"author":{"name":"Tester Army","email":"hello@tester.army"},"license":"MIT","_id":"testerarmy@0.3.2","maintainers":[{"name":"okwasniewski","email":"oskar@okwasniewski.com"}],"homepage":"https://tester.army","bugs":{"url":"https://github.com/tester-army/tester-army/issues"},"bin":{"ta":"dist/cli.js","testerarmy":"dist/cli.js"},"dist":{"shasum":"f6502534ef35b978c41b846d21570dfb2b2b07b1","tarball":"https://registry.npmjs.org/testerarmy/-/testerarmy-0.3.2.tgz","fileCount":3,"integrity":"sha512-imAA4xkqHEtOpR8vO3E+M/gnhoTjK6FWbs15fK8iqHYqashC6ZmB8mBeAc6nsoaZ0a62pYc6QTy9tB538w5Auw==","signatures":[{"sig":"MEUCIHvv5hs97m74VUQLnT931ZHRTSzT5cpiMl306PyYQoEbAiEAuSoWJpx8cUA9R1m22KKNxdrJLE6gYinTT0xFXMDMMeI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1026251},"type":"module","gitHead":"a43c9016d979613182b028ddbfb04a1a31bbcc8c","scripts":{"lint":"tsc --noEmit","build":"tsup && tsx scripts/obfuscate.ts","release":"release-it","typecheck":"tsc --noEmit"},"_npmUser":{"name":"okwasniewski","email":"oskar@okwasniewski.com"},"repository":{"url":"git+https://github.com/tester-army/tester-army.git","type":"git"},"_npmVersion":"11.6.2","description":"CLI for AI-powered QA testing - https://tester.army","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ai":"^6.0.0","table":"^6.9.0","commander":"^14.0.3","playwright":"1.59.0-alpha-1771104257000","@clack/prompts":"1.0.0","@ai-sdk/gateway":"^3.0.32","@playwright/mcp":"^0.0.68"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.0","release-it":"19.2.4","typescript":"^5.8.3","@types/node":"^22.15.18","js-confuser":"2.0.0","@testerarmy/agent":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/testerarmy_0.3.2_1773249521860_0.3846238634750325","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"testerarmy","version":"0.3.3","keywords":["testing","qa","ai","playwright","automation","cli"],"author":{"name":"Tester Army","email":"hello@tester.army"},"license":"MIT","_id":"testerarmy@0.3.3","maintainers":[{"name":"okwasniewski","email":"oskar@okwasniewski.com"}],"homepage":"https://tester.army","bugs":{"url":"https://github.com/tester-army/tester-army/issues"},"bin":{"ta":"dist/cli.js","testerarmy":"dist/cli.js"},"dist":{"shasum":"d78a9489649700861d6cf5afdc671467e3ea6dba","tarball":"https://registry.npmjs.org/testerarmy/-/testerarmy-0.3.3.tgz","fileCount":3,"integrity":"sha512-vkYRO38jWKwU+tjUIhA0/MlIabSlNZ1ljC+kzIMMOJKOAV1VYQSXhL5O8HM4YRnwz0oZu+KFBNcCiACNMXlvcw==","signatures":[{"sig":"MEQCIFNl/QRvdoXZLdiWs7NDza7Un9i5C1LduhMXvRrT8OrXAiBUMnplL5ZTQr4aZ1fWE+6BlU6/Dut8oZaiKBoBgknz0g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":860513},"type":"module","scripts":{"lint":"tsc --noEmit","build":"tsup && tsx scripts/obfuscate.ts","release":"release-it","typecheck":"tsc --noEmit"},"_npmUser":{"name":"okwasniewski","email":"oskar@okwasniewski.com"},"repository":{"url":"git+https://github.com/tester-army/tester-army.git","type":"git"},"_npmVersion":"11.6.2","description":"CLI for AI-powered QA testing - https://tester.army","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ai":"^6.0.0","table":"^6.9.0","commander":"^14.0.3","playwright":"1.59.0-alpha-1771104257000","@clack/prompts":"1.0.0","@ai-sdk/gateway":"^3.0.32","@playwright/mcp":"^0.0.68"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.0","release-it":"19.2.4","typescript":"^5.8.3","@types/node":"^22.15.18","js-confuser":"2.0.0","@testerarmy/agent":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/testerarmy_0.3.3_1774176220935_0.6142316022296288","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"testerarmy","version":"0.3.4","keywords":["ai","automation","cli","playwright","qa","testing"],"author":{"name":"Tester Army","email":"hello@tester.army"},"license":"MIT","_id":"testerarmy@0.3.4","maintainers":[{"name":"okwasniewski","email":"oskar@okwasniewski.com"}],"homepage":"https://tester.army","bugs":{"url":"https://github.com/tester-army/tester-army/issues"},"bin":{"ta":"dist/cli.js","testerarmy":"dist/cli.js"},"dist":{"shasum":"39f1995deaefcb8a274e01e59f243bed6877678d","tarball":"https://registry.npmjs.org/testerarmy/-/testerarmy-0.3.4.tgz","fileCount":3,"integrity":"sha512-WmbKtnj9kgK7XKF4jPeAk4DUqWrh8zwOIsix+hDZRjaNzAeqDwV/Z4zEsePASBeMqBc6ZhJav/5ZLzKpQjzUNg==","signatures":[{"sig":"MEUCIQDR3exn67qIOUs3wDSb31EjZFy4MtJpOVfdYEtmDTq2kgIgEYIfPr5iXFOOIXGkPqBBlPu1Y+GyDzyichUMB3aVGJQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":877152},"type":"module","scripts":{"lint":"oxlint && oxfmt --check","build":"tsup && tsx scripts/obfuscate.ts","release":"release-it","typecheck":"tsc --noEmit"},"_npmUser":{"name":"okwasniewski","email":"oskar@okwasniewski.com"},"repository":{"url":"git+https://github.com/tester-army/tester-army.git","type":"git"},"_npmVersion":"11.6.2","description":"CLI for AI-powered QA testing - https://tester.army","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ai":"^6.0.0","table":"^6.9.0","commander":"^14.0.3","playwright":"1.59.0-alpha-1771104257000","@clack/prompts":"1.0.0","@ai-sdk/gateway":"^3.0.32","@playwright/mcp":"^0.0.68"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.0","release-it":"19.2.4","typescript":"^5.8.3","@types/node":"^22.15.18","js-confuser":"2.0.0","@testerarmy/agent":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/testerarmy_0.3.4_1774980896490_0.3614575192024365","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"testerarmy","version":"0.3.5","description":"CLI for AI-powered QA testing - https://tester.army","keywords":["ai","automation","cli","playwright","qa","testing"],"homepage":"https://tester.army","license":"MIT","author":{"name":"Tester Army","email":"hello@tester.army"},"repository":{"type":"git","url":"git+https://github.com/tester-army/tester-army.git"},"bin":{"ta":"dist/cli.js","testerarmy":"dist/cli.js"},"type":"module","scripts":{"build":"tsup && tsx scripts/obfuscate.ts","typecheck":"tsc --noEmit","lint":"oxlint && oxfmt --check","release":"release-it"},"dependencies":{"@ai-sdk/gateway":"4.0.0-beta.46","@clack/prompts":"1.0.0","@playwright/mcp":"^0.0.68","ai":"7.0.0-beta.83","commander":"^14.0.3","playwright":"1.59.0-alpha-1771104257000","table":"^6.9.0"},"devDependencies":{"@testerarmy/agent":"workspace:*","@types/node":"^22.15.18","js-confuser":"2.0.0","release-it":"19.2.4","tsup":"^8.5.0","tsx":"^4.21.0","typescript":"^5.8.3"},"gitHead":"888e068f19066caf7b43222e46babe9ce1860b02","_id":"testerarmy@0.3.5","bugs":{"url":"https://github.com/tester-army/tester-army/issues"},"_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-EEmixQ1LhX9lz+7bJi60fIzxtkR780vZTFepkk1CRf+i8tddocJ+oyPkhSRcdVJtoV/6XPWCIHERo9tjBet7EQ==","shasum":"848c1f96596337017da946cf4079e61a83cb54e3","tarball":"https://registry.npmjs.org/testerarmy/-/testerarmy-0.3.5.tgz","fileCount":3,"unpackedSize":1124853,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDe5mXUp+ggbeKIsbQEYFOa0wUVMtgkr3qkzTzl0JTIZgIhANcIe22A8mQyNONuJyXTkuPPuqqH9tu+sk75tDuWZoeP"}]},"_npmUser":{"name":"szymonrybczak","email":"szymon.rybczak@gmail.com"},"directories":{},"maintainers":[{"name":"okwasniewski","email":"oskar@okwasniewski.com"},{"name":"szymonrybczak","email":"szymon.rybczak@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/testerarmy_0.3.5_1776296112964_0.9782789116714832"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-06T13:39:38.382Z","modified":"2026-04-15T23:35:13.279Z","0.0.1":"2026-03-06T13:39:38.585Z","0.0.2":"2026-03-06T16:03:51.011Z","0.1.0":"2026-03-07T16:10:04.405Z","0.2.0":"2026-03-08T09:58:46.459Z","0.3.0":"2026-03-09T15:19:41.339Z","0.3.1":"2026-03-10T12:48:20.567Z","0.3.2":"2026-03-11T17:18:42.119Z","0.3.3":"2026-03-22T10:43:41.126Z","0.3.4":"2026-03-31T18:14:56.717Z","0.3.5":"2026-04-15T23:35:13.148Z"},"bugs":{"url":"https://github.com/tester-army/tester-army/issues"},"author":{"name":"Tester Army","email":"hello@tester.army"},"license":"MIT","homepage":"https://tester.army","keywords":["ai","automation","cli","playwright","qa","testing"],"repository":{"type":"git","url":"git+https://github.com/tester-army/tester-army.git"},"description":"CLI for AI-powered QA testing - https://tester.army","maintainers":[{"name":"okwasniewski","email":"oskar@okwasniewski.com"},{"name":"szymonrybczak","email":"szymon.rybczak@gmail.com"}],"readme":"# TesterArmy CLI\n\nLocal CLI for running Tester Army QA tests with local browsers. More info:\nhttps://tester.army\n\n## Installation\n\n```bash\nnpm install -g testerarmy\n```\n\nOr run without installation:\n\n```bash\nnpx testerarmy --help\n```\n\nThe CLI installs Playwright browser binaries automatically on first `ta run`\nwhen missing. No separate `npx playwright install` step needed.\n\n## Commands\n\n### Aliases\n\nThe CLI can be invoked using either `testerarmy` or `ta`:\n\n```bash\nta --help\ntesterarmy --help\n```\n\n### Authentication\n\nGet your API key from the\n[Tester Army Dashboard](https://tester.army/dashboard/profile/api-keys), then\nrun:\n\n```bash\nta auth\n```\n\nOr with the full name:\n\n```bash\ntesterarmy auth --api-key YOUR_API_KEY\n```\n\n### Status\n\nCheck if CLI is already authenticated and where the active API key comes from:\n\n```bash\nta status\n```\n\nMachine-readable output:\n\n```bash\nta status --json\n```\n\n`status` checks key sources in runtime priority order:\n\n1. `TESTERARMY_API_KEY` env var\n2. Stored config (`~/.config/testerarmy/config.json`)\n\nIf no key exists, `authenticated` is `false`.\n\n### Sign Out\n\nRemove stored credentials:\n\n```bash\nta signout\n```\n\nOr:\n\n```bash\nta logout\n```\n\n### Run Tests\n\nRun a QA test against a website:\n\n```bash\nta run \"test if my website works correctly on https://example.com\"\n```\n\nWith options:\n\n```bash\nta run \"test login flow\" --url https://example.com --headed\nta run \"test login flow\" --url https://example.com --browser firefox\n```\n\n### Run from Markdown File\n\nExecute tests defined in markdown files:\n\n```bash\n# Single test file\nta run tests/homepage.md\n\n# Directory of tests (runs in parallel)\nta run tests/\n\n# With custom concurrency\nta run tests/ --parallel 5\n```\n\nWhen running a directory, the CLI looks for `TESTER.md` in that directory and\nprepends its contents to each test file. This is useful for shared setup\ninstructions (like authentication).\n\n### Run Dashboard Tests\n\nFetch and run tests defined in the TesterArmy dashboard on local browsers:\n\n```bash\n# List your projects\nta projects\n\n# List tests and groups for a project\nta tests list --project <projectId>\nta tests groups --project <projectId>\n\n# Run a single dashboard test\nta tests run <testId>\nta tests run <testId> --headed --url http://localhost:3000\n\n# Run all tests in a group\nta tests run --group <groupId> --project <projectId> --parallel 3\n```\n\nThe target URL defaults to the project URL from the dashboard. Override with\n`--url` or `TESTERARMY_TARGET_URL`.\n\n## Options\n\n- `--url <url>`: Target URL if not included in prompt\n- `--headed`: Run browser in headed mode (visible)\n- `--browser <browser>`: Browser to run (`chrome`, `firefox`, `safari`; `safari` requires macOS)\n- `--json`: Output results as JSON\n- `--api-key <key>`: Override API key for single run\n- `--base-url <url>`: Override API base URL\n- `--timeout <ms>`: Set timeout in milliseconds\n- `--parallel <n>`: Number of parallel tests when running directory (default: 3)\n- `--output <file>`: Write output to file\n- `--system-prompt-file <file>`: Override the base system prompt with file\n  contents\n\n## Environment Variables\n\nFor automation and CI/CD, you can use environment variables:\n\n```bash\n# API credentials\nexport TESTERARMY_API_KEY=\"your-api-key\"\nexport TESTERARMY_BASE_URL=\"https://tester.army\"\n\n# Target URL for tests (alternative to --url)\nexport TESTERARMY_TARGET_URL=\"https://example.com\"\n\n# Then run without prompts\nta run \"test login flow\" --json\n```\n\n## Debug Artifacts\n\nFor evals and offline review, use `--debug`:\n\n```bash\nta run \"verify pricing toggle works\" --url http://127.0.0.1:3100 --debug\n```\n\nThis writes a `debug-run.json` artifact inside the run directory with:\n\n- streamed chat/tool chunks\n- assistant transcript summary\n- normalized tool-call timeline\n- final QA result or error details\n\nWhen `--output <file>` is provided, the CLI now writes a machine-readable run\nenvelope on both success and failure so external runners can locate the\nartifacts reliably.\n\n## Config\n\nThe CLI stores config at:\n\n`~/.config/testerarmy/config.json`\n\nConfig keys:\n\n- `apiKey`: Tester Army dashboard API key\n- `baseUrl`: API base URL (default: `https://tester.army`)\n\n## CI/CD Example\n\n### Markdown tests\n\n```bash\nexport TESTERARMY_API_KEY=\"${{ secrets.TESTERARMY_API_KEY }}\"\nexport TESTERARMY_TARGET_URL=\"https://staging.example.com\"\n\nta run tests/ --json > results.json\n```\n\n### Dashboard tests in GitHub Actions\n\n```yaml\n- name: Run dashboard tests\n  run: npx testerarmy tests run --group <groupId> --project <projectId> --json --parallel 3\n  env:\n    TESTERARMY_API_KEY: ${{ secrets.TESTERARMY_API_KEY }}\n```\n\n## Examples\n\n```bash\n# Interactive authentication\nta auth\n\n# Check auth/key status\nta status --json\n\n# Quick test\nta run \"check homepage loads on https://mysite.com\"\n\n# Full command\ntesterarmy run \"test checkout flow\" --url https://shop.example.com --headed\n\n# Run with Firefox\nta run \"test checkout flow\" --url https://shop.example.com --browser firefox\n\n# Run from markdown file with env URL\nta run tests/10-create-api-key.md --headed\n\n# Batch run all tests\nta run tests/ --parallel 4 --json\n```\n\n## Exit Codes\n\n- `0`: All tests passed\n- `1`: One or more tests failed\n- `2`: Runtime/CLI error\n","readmeFilename":"README.md"}