8 Detection Signals — evaluateSignals() from audit.ts
navigator.webdriver
false
webdriver property not exposed — automation flag absent
navigator.plugins.length
5
Plugin count non-zero — headless Chrome typically returns 0
window.chrome
present
Chrome runtime object exists — expected in real Chrome
Notification.permission
"denied"
Permission denied without prior prompt — suspicious for headless contexts
User-Agent headless
not present
"HeadlessChrome" substring absent from UA string
User-Agent automation
clean
No automation keywords (Selenium, PhantomJS, wdio) found in UA
Screen vs Viewport
screen 1920×1080 / viewport 1280×800
Screen and viewport differ — headless typically reports identical values
navigator.languages
["en-US", "en"]
Languages array non-empty — headless often returns []
Summary: 1 of 8 signals suspicious (Notification.permission). Score 80 → verdict clean. Recommended: clear
Raw vs Patched Browser Fingerprint
navigator properties before and after ghost-shield stealth patches apply
Raw — before patching
navigator.webdrivertrue
plugins.length0
window.chromeundefined
Notification.permission"denied"
User-AgentHeadlessChrome/125...
screen.width1280
innerWidth1280
navigator.languages[]
navigator.platformLinux x86_64
Patched — ghost-shield applied
navigator.webdriverfalse
plugins.length5
window.chrome{ runtime: {…} }
Notification.permission"default"
User-AgentChrome/125 Win64...
screen.width1920
innerWidth1280
navigator.languages["en-US","en"]
navigator.platformWin32
StealthOptions applied: navigatorPatch=true, canvasNoise=true, webglSpoof=true, humanMouse=true, humanTyping=true
Block History
AuditResult[] — sorted by auditedAt desc · verdict: clean | suspicious | flagged
| Audited At | URL | Score | Verdict | BlockType | Response |
|---|---|---|---|---|---|
| 2026-06-29 09:42 | greenhouse.io/careers | 80 | clean | not-blocked | clear |
| 2026-06-28 16:11 | loxo.co/jobs | 62 | suspicious | captcha | rotate-proxy |
| 2026-06-28 14:03 | greenhouse.io/apply/42 | 38 | flagged | ip-ban | human-handoff |
| 2026-06-27 22:58 | loxo.co/search | 50 | suspicious | js-challenge | change-fingerprint |
| 2026-06-27 18:30 | greenhouse.io/jobs | 75 | suspicious | rate-limit | retry-later |
| 2026-06-27 09:15 | loxo.co/careers | — | flagged | unknown | human-handoff |
Browser Profiles
BrowserProfile[] — each isolates cookies, storageState, viewport, locale
Chrome Win — Stealth A
id: a3f7b2c8-d1e4
userAgentChrome/125 Win64
viewport1280 × 800
localeen-US
timezoneAmerica/Chicago
platformWin32
cookiesPath~/.ghost-shield/cookies/a3f7.json
storageStatePath~/.ghost-shield/state/a3f7.json
lastUsedAt2026-06-29T09:42Z
Chrome Mac — Stealth B
id: 9e2c4a01-b5f3
userAgentChrome/124 MacOS
viewport1440 × 900
localeen-GB
timezoneEurope/London
platformMacIntel
cookiesPath~/.ghost-shield/cookies/9e2c.json
storageStatePath~/.ghost-shield/state/9e2c.json
lastUsedAt2026-06-28T16:11Z
Stealth Configuration
StealthOptions — applied per session via ghost-shield apply <profileId>
Active StealthOptionsprofileId: a3f7b2c8-d1e4
canvasNoise
Inject per-pixel noise into canvas readback to defeat fingerprinting
webglSpoof
Spoof WebGL renderer and vendor strings to a plausible GPU identity
navigatorPatch
Patch navigator.webdriver, plugins, chrome object, languages, platform
humanMouse
Simulate Bézier-curve mouse trajectories with realistic acceleration
humanTyping
Add variable keystroke delays to match human WPM distributions
Exported Config
{
"profileId": "a3f7b2c8-d1e4",
"canvasNoise": true,
"webglSpoof": true,
"navigatorPatch": true,
"humanMouse": true,
"humanTyping": true
}