Hacker News
July 20, 20262 min read
Self-hosted web operability analysis. Crawl coverage, accessibility-tree inspection, and agent navigation break points.
The problem AI agents are starting to browse the web for people — opening pages, clicking buttons, filling forms. A site can look fine in a browser and still be hard for an agent to use: buttons without labels, pages that only load in JavaScript, links that never show up in the page structure agents read.
Being findable (SEO, citations, llms.txt ) is not the same as being usable by an agent on the live site.
OpenIngress crawls a site like a browser would, inspects what an agent can actually see and click, then runs LLM-guided tasks against that crawl. The output is a report: which pages were reached, what broke, and where navigation stalled.
flowchart TB subgraph crawl["Crawl (Playwright)"] URL[Site URL] --> BFS[BFS page discovery] BFS --> CAP[HTML · screenshots · aria snapshots] end subgraph analyze["Analyze"] CAP --> STATIC[Static operability] CAP --> GRAPH[Navigation graph] STATIC --> GAPS[Gap taxonomy] end subgraph explore["Explore (BYOK LLM)"] GRAPH --> CATALOG[Page catalog] CATALOG --> JOBS[Exploration jobs] LLM[OpenAI-compatible API] --> JOBS JOBS --> TRACE[Job traces · blockers] end subgraph report["Report"] GAPS --> OUT[Coverage + break points] TRACE --> OUT end Loading Stage Input Output Crawl Public URL Page graph, DOM, screenshots, Playwright accessibility snapshots Analyze Crawl artifacts Operability scores, label coverage, llms.txt , hydration checks, gap taxonomy Explore Catalog + LLM key Reachability jobs, task attempts, blocker evidence Report Analysis + job results Readiness metrics, break points, markdown export Default crawl bounds: depth 3 , max 100 pages.
Layer Components API Flask, Gunicorn Automation Playwright (Chromium), Python 3.10+ Exploration OpenAI-compatible LLM (Azure, Gemini, Ollama, local proxy) UI Vue 3, Vite Persistence Local filesystem; optional Supabase Quick start cp .env.example .env cp backend/.env.example backend/.env cp frontend/.env.example frontend/.env # LLM_API_KEY required in backend/.env make install make backend # terminal 1 — API make frontend # terminal 2 — UI Configuration, Docker, and deployment: SELF_HOST.md .
Variable Required Description LLM_API_KEY yes Provider key (OpenAI or compatible) LLM_BASE_URL no Custom endpoint LLM_MODEL_NAME no Default gpt-4o-mini AUTH_DISABLED no Default 1 Runs and exploration require a configured LLM key.
Path Description backend/ Flask API, crawl/explore workers, report generation frontend/ Vue dashboard docs/ Agent brief, Playwright recording notes Dockerfile Playwright + Gunicorn container License MIT
Read what's here, then head to the original whenever you're ready - never required.
Continue Reading on Hacker NewsGoogle Developers July 21, 2026