haunt
Health Uyari
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 9 GitHub stars
Code Gecti
- Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Gecti
- Permissions — No dangerous permissions requested
This is a Claude Code plugin that launches AI-driven phantom users to test your web application. It uses a real Chromium browser to simulate unpredictable user behaviors—like submitting empty forms or clicking randomly—and generates structured bug reports based on what it finds.
Security Assessment
The light code scan of 12 files found no dangerous patterns, hardcoded secrets, or dangerous permission requests. The tool does launch a local Chromium browser to interact with your application, which inherently involves making local network requests to your running app. However, it requires no API keys, no external configuration, and appears to operate entirely within your local environment. Overall risk is rated as Low.
Quality Assessment
The project is actively maintained, with its most recent push happening today. It uses the permissive and standard MIT license. However, community trust and visibility are currently very low; the repository has only 9 GitHub stars, meaning the codebase has not been widely vetted by a large audience. While the setup process is simple and the documentation is clear, developers should keep in mind that this is an early-stage, low-visibility project.
Verdict
Safe to use, though it should be evaluated as an early-stage tool with minimal community oversight.
AI phantom users that test your app the way real users actually use it.
You're shipping faster than ever with AI. You're also shipping more bugs — you just don't know it yet.
Because you test your app the way you built it. You click the right buttons. You fill the right fields. You follow the happy path you designed.
Your users don't.
They submit empty forms. They paste garbage into your inputs. They bookmark random URLs. They click "submit" three times before your loading state kicks in. Every one of those moments is a silent churn event you'll never see in your logs.
Haunt fixes this. It unleashes AI phantom users on your app while you build — a confused beginner, a user who breaks every input, someone navigating keyboard-only. Real Chromium browser, AI-driven behavior, structured bug report out.
🔍 What it finds
We ran Haunt on a SaaS app after months of manual testing. 2 minutes, 6 bugs:
haunt v0.1.0 — phantom user testing
scouting...
routes: / /signup /dashboard /pricing
testing 4 areas...
────────────────────────────────────────
4 areas tested · 6 issues found
[!!!] 1 critical
[!!] 4 major
[!] 1 minor
> Signup form crashes the server with a 500 on empty submission — no error shown
> Authenticated users can reach /signup and /login with no redirect
fix first: add server-side validation to the signup handler — empty submission
currently returns a 500, leaving users with a blank broken screen
report: .haunt-reports/2026-04-20-confused-beginner.md
────────────────────────────────────────
The developer had tested the signup form. But they'd tested it knowing what to fill in.
🔁 Test → report → fix. One loop.
The report ends with a "For Claude" section — paste it into your next prompt and it fixes every issue in order of severity, with the likely file for each one.
## For Claude
1. [CRITICAL] http://localhost:3000/signup — Add server-side validation before
processing signup: check email and password are non-empty, return a 400 with
an error message if missing. Likely in app/signup/page.tsx.
2. [MAJOR] http://localhost:3000/signup — Add middleware or page-level session
check to redirect authenticated users to /dashboard. Likely in middleware.ts.
...
Find bugs. Read report. Fix with one prompt. Run again.
🚀 Install
/plugin install haunt
/reload-plugins
No API key. No config. Chromium installs itself on first run.
Requires: Claude Code · Node.js 18+
🎮 Usage
# Default — a confused first-time user explores your app
/haunt:haunt-test http://localhost:3000
# Watch it happen in real time
/haunt:haunt-test http://localhost:3000 --headed
# Adversarial — probes every input and URL
/haunt:haunt-test http://localhost:3000 --personas malicious-user
# Accessibility — keyboard-only, finds every broken interaction
/haunt:haunt-test http://localhost:3000 --personas screen-reader-user
# Full sweep — all three personas at once
/haunt:haunt-test http://localhost:3000 --personas confused-beginner,malicious-user,screen-reader-user
# Test authenticated areas — Haunt logs in first, then explores
/haunt:haunt-test http://localhost:3000 --email [email protected] --password secret
Reports saved to .haunt-reports/ — structured markdown with YAML frontmatter.
Full flag reference: docs/cli.md
👻 The personas
Each phantom user has a different way of going off-script.
| Persona | Who they are | What they do |
|---|---|---|
😕 confused-beginner |
First-time user with no context | Submits forms empty, enters wrong data types, modifies URLs, hits back after submit, ignores instructions |
😈 malicious-user |
User who pushes on everything | Tries unexpected inputs in every field, accesses URLs directly, probes what's reachable without logging in |
♿ screen-reader-user |
Keyboard-only user | Tabs through every element, triggers modal edge cases, checks if errors are announced, finds unlabeled buttons |
✍️ Custom personas
Your app has specific failure modes. Write the user who finds them.
name: Impatient Power User
description: Moves fast, skips steps, expects things to just work
system_prompt: |
You move fast and skip everything that looks optional.
Double-click buttons. Refresh mid-flow. Skip required fields and submit anyway.
If something needs more than 2 steps, try to skip one.
Report anything that breaks when you don't follow the expected sequence.
browser:
headless: true
viewport: { width: 1440, height: 900 }
scenarios:
- name: Speed run
goal: Break the experience by going too fast
max_steps: 10
/haunt:haunt-test http://localhost:3000 --personas ./personas/power-user.yaml
🔧 How it works
/haunt-test your command
│
├── scouting reads real links from your app's DOM
│ maps up to 4 areas to test
│
├── spawns N phantoms one browser per area, all parallel
│ ├── 👻 /signup confused beginner tries to register
│ ├── 👻 /dashboard tries the main app without context
│ ├── 👻 /pricing looks at plans, looks for a CTA
│ └── 👻 /editor lands directly, no onboarding
│
└── report issues ranked by impact
"For Claude" section auto-fixes everything
No AI vision. No magic. Just a real browser reading your accessibility tree — and an AI deciding what a confused user would do next.
📄 License
MIT — fork it, extend it, add personas, run it in CI.
If Haunt finds something real in your app, we'd love to hear what it caught.
Haunt is what you run right before you do.
Yorumlar (0)
Yorum birakmak icin giris yap.
Yorum birakSonuc bulunamadi