@hasna/testers
v0.0.31
Published
AI-powered QA testing CLI — spawns cheap AI agents to test web apps with headless browsers
Maintainers
Readme
@hasna/testers
AI-powered QA testing CLI — spawns cheap AI agents to test web apps with headless browsers
Install
bun install -g @hasna/testers
# or
npm install -g @hasna/testersCLI Usage
testers --help
testers run https://my-preview.example.comPassing a URL as the first argument will, by default, crawl the site and auto-generate scenarios if none exist for the project. Disable with --no-auto-generate.
Common Flags
--json --output results.json— write structured results to a file for downstream tooling.--timeout <ms>— per-scenario timeout (default: 60s).--overall-timeout <ms>— hard timeout for the whole run (default: 10 minutes; CI safety net).--github-comment— post a pass/fail summary as a comment on the current GitHub PR.
Secure Production Debugging
Use prod-debug when an agent or support engineer needs to inspect a production issue without handling customer passwords, raw cookies, bearer tokens, or OAuth codes:
testers prod-debug "https://alumia.com/acme/projects/project-123?agent=agent-id" --reason "connector auth error"
testers prod-debug "req_abc123" --logs --json
testers prod-debug "https://app.example.com/org/projects/p1" --profile app --json
testers prod-debug "https://app.example.com/org/projects/p1" --support-url "https://support.example.com/scoped/session" --support-grant support-grant-123The command parses the target, redacts sensitive URL parameters, emits safe browser/API/log checks, and blocks user-scoped browser reproduction until the target app provides an audited support browser/session URL or a configured profile that can resolve one. It is app-generic: add a profile in ~/.hasna/testers/config.json for each production app rather than hardcoding app-specific behavior in the CLI.
{
"prodDebug": {
"apps": {
"app": {
"name": "App",
"origins": ["https://app.example.com", "*.app.example.org"],
"supportGrantRef": "$APP_SUPPORT_GRANT",
"supportUrlTemplate": "https://support.example.com/scoped/session?grant={supportGrant}&target={targetUrlEncoded}",
"piiOrigin": "https://api.app.example.com",
"logCommand": "app logs --project {project} --session {session} --request {request}"
}
}
}
}Credential-bearing profile values can point at environment variables ($APP_SUPPORT_GRANT) or the local Hasna secrets vault (@secrets:division/app/support/grant). Generated plans redact token, grant, session, key, password, OAuth code, and bearer values before printing or writing output.
Exit Codes
| Code | Meaning |
|------|---------|
| 0 | All tests passed |
| 1 | One or more tests failed |
| 2 | Configuration error (missing API key, unreachable URL, overall-timeout hit, etc.) |
GitHub Actions / PR Preview Testing
# .github/workflows/qa.yml
name: AI QA Tests
on:
pull_request:
permissions:
contents: read
pull-requests: write
jobs:
qa:
runs-on: ubuntu-latest
steps:
- uses: oven-sh/setup-bun@v2
- run: bun install -g @hasna/testers
- run: testers run ${{ needs.deploy.outputs.preview_url }} --github-comment --json --output results.json
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/upload-artifact@v4
if: always()
with:
name: testers-results
path: results.jsonThe --github-comment flag automatically:
- reads the PR number from
GITHUB_REF(orGITHUB_PR_NUMBERfor custom workflows), - reads the repo from
GITHUB_REPOSITORY, - uses
GITHUB_TOKENto post a Markdown summary with a pass/fail table.
Generate a starter workflow automatically:
testers ciMCP Server
testers-mcp64 tools available.
REST API
testers-serveCloud Sync
This package supports cloud sync via @hasna/cloud:
cloud setup
cloud sync push --service testers
cloud sync pull --service testersData Directory
Data is stored in ~/.hasna/testers/.
License
Apache-2.0 -- see LICENSE
