{"_id":"@appliqation/explorer","_rev":"4-ee06c845e85b755f0c53fa1af6d6997a","name":"@appliqation/explorer","dist-tags":{"latest":"0.1.4"},"versions":{"0.1.1":{"name":"@appliqation/explorer","version":"0.1.1","_id":"@appliqation/explorer@0.1.1","maintainers":[{"name":"archana6","email":"accounts@appliqation.io"}],"bin":{"appliqation-explorer":"dist/cli/index.js"},"dist":{"shasum":"118d5f8b7d58318def874e1811cf0a25ff9afae7","tarball":"https://registry.npmjs.org/@appliqation/explorer/-/explorer-0.1.1.tgz","fileCount":15,"integrity":"sha512-VkFX2maIp8ciVgTiGJP884tgFHo+yYmzLmXBtEAd+mVLrbVNbCr94QW8JgGdq13eTD2+kLnjC7lig8Su8WiFSg==","signatures":[{"sig":"MEYCIQDb4E5D9forpG4jDzfqu2q+70dOMbbasWAgZaTzIeAnjQIhANVIGDra5tfnj2tXq3xYfNCvxtIon8BO9G4wa+ebuu7S","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31749},"type":"module","engines":{"node":">=20"},"gitHead":"7139e613be8412a80485c1884a07d141b6dae000","scripts":{"dev":"tsx src/cli/index.ts","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"archana6","email":"accounts@appliqation.io"},"_npmVersion":"11.7.0","description":"Standalone agent that runs Appliqation's exploratory-QA workflow (appq:runman) headlessly against a live app under test — the same senior-QA heuristics pass, without a human at the confirmation gate.","directories":{},"_nodeVersion":"23.10.0","dependencies":{"dotenv":"^16.4.7","commander":"^13.1.0","playwright":"^1.51.0","@appliqation/agent-core":"^0.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","vitest":"^3.2.7","typescript":"^5.8.2","@types/node":"^22.13.10"},"_npmOperationalInternal":{"tmp":"tmp/explorer_0.1.1_1787298677301_0.7086430428046726","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@appliqation/explorer","version":"0.1.2","license":"MIT","_id":"@appliqation/explorer@0.1.2","maintainers":[{"name":"archana6","email":"accounts@appliqation.io"}],"homepage":"https://github.com/appliqation/explorer#readme","bugs":{"url":"https://github.com/appliqation/explorer/issues"},"bin":{"appliqation-explorer":"dist/cli/index.js"},"dist":{"shasum":"6c7ae4f204dd4d85e7c3eca0115d6696906c80f9","tarball":"https://registry.npmjs.org/@appliqation/explorer/-/explorer-0.1.2.tgz","fileCount":15,"integrity":"sha512-dVVZ8wZNy1Yp+4UsHfECCM49dwQtff9xG/WDFGRquNkwh/mp6TXXi5CwCHRjtiLXB3ZUK/YIOKgOImhZTczx8Q==","signatures":[{"sig":"MEUCIQDEwVHtoX1PfY5C28tgbaVpJ5K9Zb7/9KKVws/PpAqK1gIgKXs/hpo4x+G2dZM28jAgMvr9mSyEjgwi2ecAeL+ARVc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33917},"type":"module","engines":{"node":">=20"},"gitHead":"b3335064736663657fddbb16cddd7ea50ecfe142","scripts":{"dev":"tsx src/cli/index.ts","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"archana6","email":"accounts@appliqation.io"},"repository":{"url":"git+https://github.com/appliqation/explorer.git","type":"git"},"_npmVersion":"11.7.0","description":"Standalone agent that runs Appliqation's exploratory-QA workflow (appq:runman) headlessly against a live app under test — the same senior-QA heuristics pass, without a human at the confirmation gate.","directories":{},"_nodeVersion":"23.10.0","dependencies":{"dotenv":"^16.4.7","commander":"^13.1.0","playwright":"^1.51.0","@appliqation/agent-core":"^0.1.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","eslint":"^9.39.5","vitest":"^3.2.7","@eslint/js":"^9.39.5","typescript":"^5.8.2","@types/node":"^22.13.10","typescript-eslint":"^8.67.0"},"_npmOperationalInternal":{"tmp":"tmp/explorer_0.1.2_1787382405272_0.5665189874554983","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@appliqation/explorer","version":"0.1.3","license":"MIT","_id":"@appliqation/explorer@0.1.3","maintainers":[{"name":"archana6","email":"accounts@appliqation.io"}],"homepage":"https://github.com/appliqation/explorer#readme","bugs":{"url":"https://github.com/appliqation/explorer/issues"},"bin":{"appliqation-explorer":"dist/cli/index.js"},"dist":{"shasum":"9864d73e22f9ac198922677bb0245126b242e4ce","tarball":"https://registry.npmjs.org/@appliqation/explorer/-/explorer-0.1.3.tgz","fileCount":15,"integrity":"sha512-CoZ1+aJQens6YLq4Uc1CdooehXzmp4hJmvM6OTZE2PnFQZ0Ni0d2ViW0ORnNetJRJg8i4uE12Co6Ei3J3C8fHw==","signatures":[{"sig":"MEQCIAe64vNF1IApHyt18wNsAn2P7QVu0P3nnZ0FmthHVGuOAiBzvhV95rLxZ82Nxj1hVFDWr7G5fDSoSqvVp/ake0V64Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36696},"type":"module","engines":{"node":">=20"},"gitHead":"cef399267f6b3c4576c5bc41c6108d8e47ef77e3","scripts":{"dev":"tsx src/cli/index.ts","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"archana6","email":"accounts@appliqation.io"},"repository":{"url":"git+https://github.com/appliqation/explorer.git","type":"git"},"_npmVersion":"11.7.0","description":"Standalone agent that runs Appliqation's exploratory-QA workflow (appq:runman) headlessly against a live app under test — the same senior-QA heuristics pass, without a human at the confirmation gate.","directories":{},"_nodeVersion":"23.10.0","dependencies":{"dotenv":"^16.4.7","commander":"^13.1.0","playwright":"^1.51.0","@appliqation/agent-core":"^0.1.7"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","eslint":"^9.39.5","vitest":"^3.2.7","@eslint/js":"^9.39.5","typescript":"^5.8.2","@types/node":"^22.13.10","typescript-eslint":"^8.67.0"},"_npmOperationalInternal":{"tmp":"tmp/explorer_0.1.3_1788433837956_0.367359254291568","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@appliqation/explorer","version":"0.1.4","description":"Standalone agent that runs Appliqation's exploratory-QA workflow (appq:runman) headlessly against a live app under test — the same senior-QA heuristics pass, without a human at the confirmation gate.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/appliqation/explorer.git"},"homepage":"https://github.com/appliqation/explorer#readme","bugs":{"url":"https://github.com/appliqation/explorer/issues"},"type":"module","bin":{"appliqation-explorer":"dist/cli/index.js"},"engines":{"node":">=20"},"scripts":{"build":"tsc -p tsconfig.build.json","dev":"tsx src/cli/index.ts","typecheck":"tsc -p tsconfig.json --noEmit","lint":"eslint src --ext .ts","test":"vitest run","test:watch":"vitest"},"dependencies":{"@appliqation/agent-core":"^0.1.7","commander":"^13.1.0","dotenv":"^16.4.7","playwright":"^1.51.0"},"devDependencies":{"@eslint/js":"^9.39.5","@types/node":"^22.13.10","eslint":"^9.39.5","tsx":"^4.19.3","typescript":"^5.8.2","typescript-eslint":"^8.67.0","vitest":"^3.2.7"},"gitHead":"50f2e6dd9d3d04841c151ff32cf4f5edeacb4c4f","_id":"@appliqation/explorer@0.1.4","_nodeVersion":"23.10.0","_npmVersion":"11.7.0","dist":{"integrity":"sha512-hk0eG0ou2zAPjBFX2PfkO2coGpN+vezZXjohdvt5QKDHaZ5hYIYDSOA9aqzUPyFZ9RiIlIJ7mUP0m2n+BkZ/wA==","shasum":"aaa74aee5152a9945bd8b4b2ba65d293449209a9","tarball":"https://registry.npmjs.org/@appliqation/explorer/-/explorer-0.1.4.tgz","fileCount":15,"unpackedSize":37467,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDGYy3VEjMDx/q9H91R85wtNLWDPt1zy6qEqcbqsO7XKQIhALvEZ4gUMxWtYgh/9agI+6haMSfcQikxL6HPjtvpRgvV"}]},"_npmUser":{"name":"archana6","email":"accounts@appliqation.io"},"directories":{},"maintainers":[{"name":"archana6","email":"accounts@appliqation.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/explorer_0.1.4_1788493388459_0.9899119601872082"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-21T07:51:17.000Z","modified":"2026-09-04T03:43:08.769Z","0.1.1":"2026-08-21T07:51:17.452Z","0.1.2":"2026-08-22T07:06:45.430Z","0.1.3":"2026-09-03T11:10:38.088Z","0.1.4":"2026-09-04T03:43:08.590Z"},"bugs":{"url":"https://github.com/appliqation/explorer/issues"},"license":"MIT","homepage":"https://github.com/appliqation/explorer#readme","repository":{"type":"git","url":"git+https://github.com/appliqation/explorer.git"},"description":"Standalone agent that runs Appliqation's exploratory-QA workflow (appq:runman) headlessly against a live app under test — the same senior-QA heuristics pass, without a human at the confirmation gate.","maintainers":[{"name":"archana6","email":"accounts@appliqation.io"}],"readme":"# Appliqation Explorer\n\n**Runs Appliqation's exploratory-QA workflow (`appq:runman`) headlessly against a live app under test — the same senior-QA heuristics pass a human runs interactively in Claude Code, without a human at the confirmation gate.**\n\nPoint it at a URL (or let it resolve one from a project) and a plain-English intent, and it drives a real Playwright browser through surface mapping, a 13-category senior-QA heuristics pass, and mandatory security/network/caching/mobile probes — the exact same methodology Appliqation already serves interactively, just run unattended.\n\n## Why this exists\n\nEvery other agent in this family answers a narrow, structured question: does this test case pass (autotest), is there a script for it (scriptgen), can this defect be fixed (defect-fix). None of them go looking for the bugs a scripted test never checks for — accessibility gaps, race conditions, caching bugs, things that only show up when someone actually explores. Appliqation already has this covered as `appq:runman`, but until now the only way to run it was interactively. This is the standalone, unattended client for it.\n\n## The one thing this agent deliberately can't do\n\n`appq:runman`'s own prompt ends a pass by calling `enrich_project_context` with `action=write`, to persist findings (`known_issues`, `high_risk_areas`, `regression_watchlist`) as memory for future passes. **This agent refuses that call.**\n\nWhen `appq:runman` runs interactively inside Claude Code, a human is present at its Phase 2 confirmation gate and reads the findings report before anything happens next — informal but real supervision over what gets written back as fact for future agents to trust. A standalone, headless invocation has no equivalent: nothing reviews it turn to turn. So this agent holds the conservative default instead: it can read project context (`enrich_project_context` with `action=read` — informs what's worth exploring), but a write attempt is refused at the dispatch layer, in code, before it ever reaches appq — not honored just because the served prompt asks for it. Genuinely read-only end to end; see [`@appliqation/agent-core`](https://github.com/appliqation/agent-core)'s `createReadOnlyProjectContextDispatcher`.\n\n## Quick start\n\n```bash\nnpm install -g @appliqation/explorer\nnpx playwright install chromium\n```\n\nCreate a `.env` file (in whatever directory you'll run it from) with:\n\n```\nAPPQ_API_KEY=your-appliqation-api-key   # read-only is enough\nANTHROPIC_API_KEY=your-anthropic-key    # or OPENAI_API_KEY — pick one\n```\n\n```bash\nappliqation-explorer explore \\\n  --prompt \"Explore the signup flow like a senior QA lead, focus on the phone number field\" \\\n  --project-id 1349 \\\n  --site-url https://stage.example.com\n```\n\nAdd `--json`/`--ci` for a structured summary. There's no `--dry-run` — this agent never has real write access to anything, so there's nothing to suppress. The exit code is 0 unless the pass hit its own budget cap and ended early; \"found bugs\" is never a failure — that's the entire point of running it.\n\n## CLI reference\n\n`appliqation-explorer explore [options]`\n\n**Required:**\n\n| Option | Description |\n|---|---|\n| `--prompt <text>` | Plain-English exploration intent — can embed a URL. |\n\n**Optional:**\n\n| Option | Description |\n|---|---|\n| `--project-id <id>` | appq project id — enables reading persistent project-context memory. |\n| `--site-url <url>` | Override the URL `appq:runman` would otherwise resolve on its own. |\n| `--max-steps <n>` | Override `EXPLORE_MAX_STEPS` for this run. |\n| `--max-pages <n>` | Override `EXPLORE_MAX_PAGES` for this run. |\n| `--max-minutes <n>` | Override `EXPLORE_MAX_MINUTES` for this run. |\n| `--json` | Print a single structured JSON summary on stdout instead of a human-readable report. |\n| `--ci` | Shorthand for `--json`. |\n\n## Configuration\n\nCopy `.env.example` to `.env`. Requires `APPQ_API_KEY` (read-only access is sufficient) and one of `ANTHROPIC_API_KEY`/`OPENAI_API_KEY`. `EXPLORE_MAX_STEPS`/`EXPLORE_MAX_PAGES`/`EXPLORE_MAX_MINUTES` are the workflow's own self-regulated budget (what the model is told to respect); `BUDGET_MAX_*` is a separate, code-enforced backstop set generously above them in case the model doesn't honor its own limits.\n\n## Running this safely\n\nThis agent drives a real browser turn by turn on the model's own decisions — the whole point of exploratory QA is going wherever the site under test leads, unattended, with no human at the confirmation gate the interactive version has. The destructive-action gate on `browser_click`/`browser_evaluate` (see `@appliqation/agent-core`'s `destructiveActionGate.ts`) blocks the obvious failure mode, but it's a code-level backstop, not a substitute for containment: this process holds `APPQ_API_KEY` and your LLM provider key, both reachable from wherever the model decides to navigate.\n\n**Run this inside a container with an egress allowlist**, not directly on a machine with broad network access. This process only ever legitimately needs to reach:\n\n- your LLM provider (`api.anthropic.com` or `api.openai.com`)\n- your configured `APPQ_ORIGIN` (`appq.appliqation.io` by default)\n- the site under test — whatever `--site-url` (or the resolved project URL) points at\n\nAnything else this process tries to reach is unexpected and worth investigating, not routing around.\n\n## Development\n\n```bash\ngit clone https://github.com/appliqation/explorer.git\ncd explorer\nnpm install\ncp .env.example .env   # fill in APPQ_API_KEY (read-only is enough) and one LLM provider key\nnpm run dev -- explore --prompt \"<text>\" [--project-id <id>] [--site-url <url>]\nnpm run typecheck\nnpm test\n```\n\nSee `CLAUDE.md` for a map of this repo if you're working in it with an AI coding assistant.\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n","readmeFilename":"README.md"}